namespace SpaceGame.Api.Universe.Contracts;

public sealed record StarSnapshot(
  string Kind,
  string Color,
  string Glow,
  float Size,
  float OrbitRadius,
  float OrbitSpeed,
  float OrbitPhaseAtEpoch);

public sealed record MoonSnapshot(
  string Label,
  float Size,
  string Color,
  float OrbitRadius,
  float OrbitSpeed,
  float OrbitPhaseAtEpoch,
  float OrbitInclination,
  float OrbitLongitudeOfAscendingNode);

public sealed record SystemSnapshot(
  string Id,
  string Label,
  Vector3Dto GalaxyPosition,
  IReadOnlyList<StarSnapshot> Stars,
  IReadOnlyList<PlanetSnapshot> Planets);

public sealed record PlanetSnapshot(
  string Label,
  string PlanetType,
  string Shape,
  IReadOnlyList<MoonSnapshot> Moons,
  float OrbitRadius,
  float OrbitSpeed,
  float OrbitEccentricity,
  float OrbitInclination,
  float OrbitLongitudeOfAscendingNode,
  float OrbitArgumentOfPeriapsis,
  float OrbitPhaseAtEpoch,
  float Size,
  string Color,
  bool HasRing);

public sealed record ResourceNodeSnapshot(
  string Id,
  string SystemId,
  Vector3Dto LocalPosition,
  string? CelestialId,
  string SourceKind,
  float OreRemaining,
  float MaxOre,
  string ItemId);

public sealed record ResourceNodeDelta(
  string Id,
  string SystemId,
  Vector3Dto LocalPosition,
  string? CelestialId,
  string SourceKind,
  float OreRemaining,
  float MaxOre,
  string ItemId);

public sealed record CelestialSnapshot(
  string Id,
  string SystemId,
  string Kind,
  Vector3Dto OrbitalAnchor,
  float LocalSpaceRadius,
  string? ParentNodeId,
  string? OccupyingStructureId,
  string? OrbitReferenceId);

public sealed record CelestialDelta(
  string Id,
  string SystemId,
  string Kind,
  Vector3Dto OrbitalAnchor,
  float LocalSpaceRadius,
  string? ParentNodeId,
  string? OccupyingStructureId,
  string? OrbitReferenceId);
