namespace SpaceGame.Api.Stations.Runtime;

public sealed class ClaimRuntime
{
    public required string Id { get; init; }
    public required string FactionId { get; init; }
    public required string SystemId { get; init; }
    public required string CelestialId { get; init; }
    public string? CommanderId { get; set; }
    public DateTimeOffset PlacedAtUtc { get; init; }
    public DateTimeOffset ActivatesAtUtc { get; set; }
    public string State { get; set; } = ClaimStateKinds.Placed;
    public float Health { get; set; }
    public string LastDeltaSignature { get; set; } = string.Empty;
}

public sealed class ConstructionSiteRuntime
{
    public required string Id { get; init; }
    public required string FactionId { get; init; }
    public required string SystemId { get; init; }
    public required string CelestialId { get; init; }
    public required string TargetKind { get; init; }
    public required string TargetDefinitionId { get; init; }
    public string? BlueprintId { get; set; }
    public string? ClaimId { get; set; }
    public string? StationId { get; set; }
    public Dictionary<string, float> Inventory { get; } = new(StringComparer.Ordinal);
    public Dictionary<string, float> RequiredItems { get; } = new(StringComparer.Ordinal);
    public Dictionary<string, float> DeliveredItems { get; } = new(StringComparer.Ordinal);
    public HashSet<string> AssignedConstructorShipIds { get; } = new(StringComparer.Ordinal);
    public HashSet<string> MarketOrderIds { get; } = new(StringComparer.Ordinal);
    public float Progress { get; set; }
    public string State { get; set; } = ConstructionSiteStateKinds.Planned;
    public string LastDeltaSignature { get; set; } = string.Empty;
}
