
namespace SpaceGame.Api.Universe.Runtime;

public sealed class SimulationWorld
{
    public required string Label { get; init; }
    public required int Seed { get; init; }
    public required List<SystemRuntime> Systems { get; init; }
    public required List<ResourceNodeRuntime> Nodes { get; init; }
    public required List<CelestialRuntime> Celestials { get; init; }
    public required List<WreckRuntime> Wrecks { get; init; }
    public required List<StationRuntime> Stations { get; init; }
    public required List<ShipRuntime> Ships { get; init; }
    public required List<FactionRuntime> Factions { get; init; }
    public PlayerFactionRuntime? PlayerFaction { get; set; }
    public GeopoliticalStateRuntime? Geopolitics { get; set; }
    public required List<CommanderRuntime> Commanders { get; init; }
    public required List<ClaimRuntime> Claims { get; init; }
    public required List<ConstructionSiteRuntime> ConstructionSites { get; init; }
    public required List<MarketOrderRuntime> MarketOrders { get; init; }
    public required List<PolicySetRuntime> Policies { get; init; }
    public required Dictionary<string, ShipDefinition> ShipDefinitions { get; init; }
    public required Dictionary<string, ItemDefinition> ItemDefinitions { get; init; }
    public required Dictionary<string, ModuleDefinition> ModuleDefinitions { get; init; }
    public required Dictionary<string, ModuleRecipeDefinition> ModuleRecipes { get; init; }
    public required Dictionary<string, RecipeDefinition> Recipes { get; init; }
    public required ProductionGraph ProductionGraph { get; init; }
    public int TickIntervalMs { get; init; } = 200;
    public double OrbitalTimeSeconds { get; set; }
    public DateTimeOffset GeneratedAtUtc { get; set; }
}
