namespace ReactorMaintenance.Simulation;

internal static class SurfaceCarrierMath
{
    public static SurfaceState AddCarrier(SurfaceState surface, ECarrierType carrier, float amount)
    {
        return carrier switch {
            ECarrierType.Fuel => surface with { Fuel = surface.Fuel + amount },
            ECarrierType.Coolant => surface with { Coolant = surface.Coolant + amount },
            ECarrierType.Electricity => surface with { Electricity = surface.Electricity + amount },
            _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.")
        };
    }

    public static SurfaceState RemoveCarrier(SurfaceState surface, ECarrierType carrier)
    {
        return carrier switch {
            ECarrierType.Fuel => surface with { Fuel = 0, FuelBlockTurns = Balancing.Current.RemedyBlockTurns },
            ECarrierType.Coolant => surface with { Coolant = 0, CoolantBlockTurns = Balancing.Current.RemedyBlockTurns },
            ECarrierType.Electricity => surface with { Electricity = 0, ElectricityBlockTurns = Balancing.Current.RemedyBlockTurns },
            _ => throw new ArgumentOutOfRangeException(nameof(carrier), carrier, "Unsupported carrier.")
        };
    }
}