using Data.SeaHavenIndustries; using Data.SeaHavenIndustries.Enums; using SeaHaven.Services.Exceptions; namespace SeaHaven.Services.Helpers { public static class WorkOrderBoardCreateLifecycleRules { private static readonly HashSet AllowedCreateStatuses = [ LifecycleStatus.Incomplete, LifecycleStatus.Pending, LifecycleStatus.Scheduled, ]; public static void ApplyRequestedOrInitialLifecycleStatus( WorkOrder workOrder, LifecycleStatus? requested, DateTime? scheduledDate, bool? scheduleWeekOnly) { if (!requested.HasValue) { WorkOrderBoardFieldMutations.SetInitialLifecycleStatus(workOrder); return; } if (!AllowedCreateStatuses.Contains(requested.Value)) { throw new WorkOrderBoardValidationException( "InvalidLifecycleStatus", "lifecycleStatus must be Incomplete, Pending, or Scheduled at create."); } if (requested == LifecycleStatus.Scheduled && !WorkOrderBoardMutationRules.HasConcreteSchedule(scheduledDate, scheduleWeekOnly)) { throw new WorkOrderBoardValidationException( "ScheduledRequiresDate", "Scheduled requires a concrete scheduledDate when scheduleWeekOnly is not true."); } workOrder.LifecycleStatus = requested.Value; workOrder.Status = WorkOrderDerivedFields.GetLifecycleStatusLabel(requested.Value); } } }