namespace ReactorMaintenance.Simulation;

public static class SurfaceStateExtensions
{
    public static SurfaceState Clamp(this SurfaceState surface)
    {
        var balancing = Balancing.Current;
        return surface with {
            Fuel = balancing.ClampValue(surface.Fuel),
            Coolant = balancing.ClampValue(surface.Coolant),
            Electricity = balancing.ClampValue(surface.Electricity),
            Heat = balancing.ClampValue(surface.Heat),
            FuelBlockTurns = Math.Max(0, surface.FuelBlockTurns),
            CoolantBlockTurns = Math.Max(0, surface.CoolantBlockTurns),
            ElectricityBlockTurns = Math.Max(0, surface.ElectricityBlockTurns)
        };
    }

    public static bool Blocks(this SurfaceState surface, ECarrierType carrier)
    {
        return carrier switch {
            ECarrierType.Fuel => surface.FuelBlockTurns > 0,
            ECarrierType.Coolant => surface.CoolantBlockTurns > 0,
            ECarrierType.Electricity => surface.ElectricityBlockTurns > 0,
            _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.")
        };
    }
}