namespace SpaceGame.Api.PlayerFaction.Contracts;

public sealed record CompletePlayerOnboardingRequest(
  string Name,
  string RaceId);

public sealed record PlayerOrganizationCommandRequest(
  string Kind,
  string Label,
  string? ParentOrganizationId,
  string? FrontId,
  string? HomeSystemId,
  string? HomeStationId,
  string? PolicyId,
  string? AutomationPolicyId,
  string? ReinforcementPolicyId,
  string? TargetFactionId,
  float? Priority,
  string? Role,
  string? ReserveKind,
  IReadOnlyList<string>? SystemIds,
  IReadOnlyList<string>? FocusItemIds,
  string? Notes);

public sealed record PlayerOrganizationMembershipCommandRequest(
  IReadOnlyList<string>? AssetIds,
  IReadOnlyList<string>? ChildOrganizationIds,
  IReadOnlyList<string>? SystemIds,
  IReadOnlyList<string>? FrontIds,
  bool Replace = false);

public sealed record PlayerDirectiveCommandRequest(
  string Label,
  string Kind,
  string ScopeKind,
  string ScopeId,
  string BehaviorKind,
  bool UseOrders,
  string? StagingOrderKind,
  string? TargetEntityId,
  string? TargetSystemId,
  Vector3Dto? TargetPosition,
  string? HomeSystemId,
  string? HomeStationId,
  string? SourceStationId,
  string? DestinationStationId,
  string? ItemId,
  string? PreferredNodeId,
  string? PreferredConstructionSiteId,
  string? PreferredModuleId,
  int Priority,
  float? Radius,
  float? WaitSeconds,
  int? MaxSystemRange,
  bool? KnownStationsOnly,
  IReadOnlyList<Vector3Dto>? PatrolPoints,
  IReadOnlyList<ShipOrderTemplateCommandRequest>? RepeatOrders,
  string? PolicyId,
  string? AutomationPolicyId,
  string? Notes);

public sealed record PlayerPolicyCommandRequest(
  string Label,
  string ScopeKind,
  string? ScopeId,
  string? PolicySetId,
  bool AllowDelegatedCombat,
  bool AllowDelegatedTrade,
  float ReserveCreditsRatio,
  float ReserveMilitaryRatio,
  string? Notes,
  string? TradeAccessPolicy,
  string? DockingAccessPolicy,
  string? ConstructionAccessPolicy,
  string? OperationalRangePolicy,
  string? CombatEngagementPolicy,
  bool? AvoidHostileSystems,
  float? FleeHullRatio,
  IReadOnlyList<string>? BlacklistedSystemIds);

public sealed record PlayerAutomationPolicyCommandRequest(
  string Label,
  string ScopeKind,
  string? ScopeId,
  bool Enabled,
  string BehaviorKind,
  bool UseOrders,
  string? StagingOrderKind,
  int MaxSystemRange,
  bool KnownStationsOnly,
  float Radius,
  float WaitSeconds,
  string? PreferredItemId,
  string? Notes,
  IReadOnlyList<ShipOrderTemplateCommandRequest>? RepeatOrders);

public sealed record PlayerReinforcementPolicyCommandRequest(
  string Label,
  string ScopeKind,
  string? ScopeId,
  string ShipKind,
  int DesiredAssetCount,
  int MinimumReserveCount,
  bool AutoTransferReserves,
  bool AutoQueueProduction,
  string? SourceReserveId,
  string? TargetFrontId,
  string? Notes);

public sealed record PlayerProductionProgramCommandRequest(
  string Label,
  string Kind,
  string? TargetShipKind,
  string? TargetModuleId,
  string? TargetItemId,
  int TargetCount,
  string? StationGroupId,
  string? ReinforcementPolicyId,
  string? Notes);

public sealed record PlayerAssetAssignmentCommandRequest(
  string AssetKind,
  string AssetId,
  string? FleetId,
  string? TaskForceId,
  string? StationGroupId,
  string? EconomicRegionId,
  string? FrontId,
  string? ReserveId,
  string? DirectiveId,
  string? PolicyId,
  string? AutomationPolicyId,
  string Role,
  bool ClearConflicts = true);

public sealed record PlayerStrategicIntentCommandRequest(
  string StrategicPosture,
  string EconomicPosture,
  string MilitaryPosture,
  string LogisticsPosture,
  float DesiredReserveRatio,
  bool AllowDelegatedCombatAutomation,
  bool AllowDelegatedEconomicAutomation,
  string? Notes);
