use crate::inspect::smp::catalog::conditions::*;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::inspect::smp) enum RealOrdinaryConditionMetric {
    WorldVariable(u32),
    Company(RuntimeCompanyMetric),
    CompanyVariable(u32),
    PlayerVariable(u32),
    Chairman(RuntimeChairmanMetric),
    Territory(RuntimeTerritoryMetric),
    TerritoryVariable(u32),
    CompanyTerritory(RuntimeTrackMetric),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::inspect::smp) enum RealWorldConditionKind {
    SpecialCondition { label: &'static str },
    CandidateAvailability,
    NamedLocomotiveAvailability,
    NamedLocomotiveCost,
    CargoProductionSlot,
    CargoProductionTotal,
    FactoryProductionTotal,
    FarmMineProductionTotal,
    OtherCargoProductionTotal,
    LimitedTrackBuildingAmount,
    TerritoryAccessCost,
    EconomicStatus,
    WorldFlag { key: &'static str },
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::inspect::smp) enum RealOrdinaryConditionKind {
    Numeric(RealOrdinaryConditionMetric),
    WorldState(RealWorldConditionKind),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(in crate::inspect::smp) struct RealOrdinaryConditionMetadata {
    pub(in crate::inspect::smp) raw_condition_id: i32,
    pub(in crate::inspect::smp) label: &'static str,
    pub(in crate::inspect::smp) kind: RealOrdinaryConditionKind,
}
