using ReactorMaintenance.Simulation.Difficulties;

namespace ReactorMaintenance.Simulation;

public abstract class Balancing
{
    public static Balancing Current { get; set; } = new NormalBalancing();

    public abstract int MinHazardValue { get; }
    public abstract int MaxHazardValue { get; }
    public abstract int DefaultHazardStability { get; }
    public abstract int DefaultCellIntegrity { get; }
    public abstract int DefaultActionsPerTurn { get; }
    public abstract int DefaultCoreHeat { get; }
    public abstract int DefaultFacilityStability { get; }
    public abstract int DefaultPower { get; }
    public abstract int DefaultCooling { get; }
    public abstract int FirstGridCoordinate { get; }
    public abstract int NeighborDistance { get; }
    public abstract int CurrentForecastTurn { get; }
    public abstract int MinimumLevelSize { get; }
    public abstract int DefaultLevelWidth { get; }
    public abstract int DefaultLevelHeight { get; }
    public abstract int DefaultRobotCoordinate { get; }
    public abstract int DefaultPipeFlow { get; }
    public abstract int DefaultPipePressure { get; }
    public abstract int DefaultPressurePipeFlow { get; }
    public abstract int DefaultPressurePipePressure { get; }
    public abstract int DefaultEditedPipeIntegrity { get; }
    public abstract int MinimumLeakRate { get; }
    public abstract int DamagedPipeIntegrity { get; }
    public abstract int RepairedLeakRate { get; }
    public abstract int RepairedElectricalCharge { get; }
    public abstract int HeatToolIncrease { get; }
    public abstract int FireToolMinimumHeat { get; }
    public abstract int FireToolMinimumSmoke { get; }
    public abstract int MaxForecastStepCount { get; }
    public abstract int TurnIncrement { get; }
    public abstract int OverpressureThreshold { get; }
    public abstract int HeatIntegrityDamageThreshold { get; }
    public abstract int PipeFireIntegrityDamage { get; }
    public abstract int FireStabilityDamage { get; }
    public abstract int BurstLeakRate { get; }
    public abstract int BrokenPipeFlow { get; }
    public abstract int ElectrifiedCoolantPoolingThreshold { get; }
    public abstract int ElectricalChargeIncrease { get; }
    public abstract int FuelVaporFireThreshold { get; }
    public abstract int LiquidFuelFireThreshold { get; }
    public abstract int HeatIgnitionThreshold { get; }
    public abstract int ElectricalIgnitionThreshold { get; }
    public abstract int FireHeatIncrease { get; }
    public abstract int FireSmokeIncrease { get; }
    public abstract int FireLiquidFuelConsumption { get; }
    public abstract int FireFuelVaporConsumption { get; }
    public abstract int SmokeDecay { get; }
    public abstract int PressurizedFuelLeakPressureThreshold { get; }
    public abstract int PassiveFuelVaporHeatOffset { get; }
    public abstract int PassiveFuelVaporDivisor { get; }
    public abstract int MinimumCoolantHeatReduction { get; }
    public abstract int CoolantHeatReductionDivisor { get; }
    public abstract int CoolantSteamHeatThreshold { get; }
    public abstract int CoolantSteamSmokeIncrease { get; }
    public abstract int PressureLeakSmokeThreshold { get; }
    public abstract int PressureLeakSmokeIncrease { get; }
    public abstract int GeneratorHeatIncrease { get; }
    public abstract int CoolingPumpHeatReduction { get; }
    public abstract int ReactorHeatIncrease { get; }
    public abstract int SmokeSpreadThreshold { get; }
    public abstract int SmokeSpreadIncrease { get; }
    public abstract int CriticalCellStabilityThreshold { get; }
    public abstract int MeltdownCoreHeatThreshold { get; }
    public abstract int StabilityCollapseThreshold { get; }
    public abstract int GeneratorPowerOutput { get; }
    public abstract int CoolingPumpOutput { get; }
    public abstract int ReactorReadyPowerThreshold { get; }
    public abstract int ReactorReadyCoolingThreshold { get; }
    public abstract int ReactorReadyCoreHeatThreshold { get; }
}