namespace SpaceGame.Api.Factions.Contracts; public sealed record FactionPlanningStateSnapshot( int MilitaryShipCount, int MinerShipCount, int TransportShipCount, int ConstructorShipCount, int ControlledSystemCount, int TargetSystemCount, bool HasShipFactory, float OreStockpile, float RefinedMetalsAvailableStock, float RefinedMetalsUsageRate, float RefinedMetalsProjectedProductionRate, float RefinedMetalsProjectedNetRate, float RefinedMetalsLevelSeconds, string RefinedMetalsLevel, float HullpartsAvailableStock, float HullpartsUsageRate, float HullpartsProjectedProductionRate, float HullpartsProjectedNetRate, float HullpartsLevelSeconds, string HullpartsLevel, float ClaytronicsAvailableStock, float ClaytronicsUsageRate, float ClaytronicsProjectedProductionRate, float ClaytronicsProjectedNetRate, float ClaytronicsLevelSeconds, string ClaytronicsLevel, float WaterAvailableStock, float WaterUsageRate, float WaterProjectedProductionRate, float WaterProjectedNetRate, float WaterLevelSeconds, string WaterLevel); public sealed record FactionStrategicPrioritySnapshot(string GoalName, float Priority); public sealed record FactionCommoditySignalSnapshot( string ItemId, float AvailableStock, float OnHand, float ProductionRatePerSecond, float CommittedProductionRatePerSecond, float UsageRatePerSecond, float NetRatePerSecond, float ProjectedNetRatePerSecond, float LevelSeconds, string Level, float ProjectedProductionRatePerSecond, float BuyBacklog, float ReservedForConstruction); public sealed record FactionThreatSignalSnapshot( string ScopeId, string ScopeKind, int EnemyShipCount, int EnemyStationCount); public sealed record FactionBlackboardSnapshot( int PlanCycle, DateTimeOffset UpdatedAtUtc, int TargetWarshipCount, bool HasWarIndustrySupplyChain, bool HasShipyard, bool HasActiveExpansionProject, string? ActiveExpansionCommodityId, string? ActiveExpansionModuleId, string? ActiveExpansionSiteId, string? ActiveExpansionSystemId, int EnemyFactionCount, int EnemyShipCount, int EnemyStationCount, int MilitaryShipCount, int MinerShipCount, int TransportShipCount, int ConstructorShipCount, int ControlledSystemCount, IReadOnlyList CommoditySignals, IReadOnlyList ThreatSignals); public sealed record FactionPlanStepSnapshot( string Id, string Kind, string Status, float Priority, string? CommodityId, string? ModuleId, string? TargetFactionId, string? TargetSiteId, string? BlockingReason, string? Notes, int LastEvaluatedCycle, IReadOnlyList DependencyStepIds, IReadOnlyList RequiredFacts, IReadOnlyList ProducedFacts, IReadOnlyList AssignedAssets, IReadOnlyList IssuedTaskIds); public sealed record FactionIssuedTaskSnapshot( string Id, string Kind, string State, string ObjectiveId, string StepId, float Priority, string? ShipRole, string? CommodityId, string? ModuleId, string? TargetFactionId, string? TargetSystemId, string? TargetSiteId, int CreatedAtCycle, int UpdatedAtCycle, string? BlockingReason, string? Notes, IReadOnlyList AssignedAssets); public sealed record FactionObjectiveSnapshot( string Id, string Kind, string State, float Priority, string? ParentObjectiveId, string? TargetFactionId, string? TargetSystemId, string? TargetSiteId, string? TargetRegionId, string? CommodityId, string? ModuleId, int BudgetWeight, int SlotCost, int CreatedAtCycle, int UpdatedAtCycle, string? InvalidationReason, string? BlockingReason, IReadOnlyList PrerequisiteObjectiveIds, IReadOnlyList AssignedAssets, IReadOnlyList Steps); public sealed record FactionSnapshot( string Id, string Label, string Color, float Credits, float PopulationTotal, float OreMined, float GoodsProduced, int ShipsBuilt, int ShipsLost, string? DefaultPolicySetId, FactionPlanningStateSnapshot? StrategicAssessment, IReadOnlyList? StrategicPriorities, FactionBlackboardSnapshot? Blackboard, IReadOnlyList? Objectives, IReadOnlyList? IssuedTasks); public sealed record FactionDelta( string Id, string Label, string Color, float Credits, float PopulationTotal, float OreMined, float GoodsProduced, int ShipsBuilt, int ShipsLost, string? DefaultPolicySetId, FactionPlanningStateSnapshot? StrategicAssessment, IReadOnlyList? StrategicPriorities, FactionBlackboardSnapshot? Blackboard, IReadOnlyList? Objectives, IReadOnlyList? IssuedTasks);