using Data.SeaHavenIndustries.Enums; namespace SeaHaven.Services.Helpers { public static class WorkOrderBoardMutationRules { private static readonly HashSet ReadOnlyStatuses = new() { LifecycleStatus.Canceled, LifecycleStatus.Completed }; public static bool IsReadOnly(LifecycleStatus? status) => ReadOnlyStatuses.Contains(status); public static bool ShouldBlockStatusChangeWhenPastDue(string field, bool isPastDue) => field.Equals(WorkOrderBoardFieldNames.LifecycleStatus, StringComparison.OrdinalIgnoreCase) && isPastDue; public static bool ShouldAutoSchedule( LifecycleStatus? status, DateTime? scheduledDate, string? assignTo) => status == LifecycleStatus.Incomplete && scheduledDate.HasValue && !string.IsNullOrWhiteSpace(assignTo); public static bool IsReschedule(DateTime? previousDate, DateTime? newDate) => previousDate.HasValue && newDate.HasValue && previousDate.Value.Date != newDate.Value.Date; public static DateOnly? ComputeOriginalWeek(DateTime? scheduledDate) => scheduledDate.HasValue ? DateOnly.FromDateTime(GetWeekStartMonday(scheduledDate.Value)) : null; private static DateTime GetWeekStartMonday(DateTime date) { var diff = (7 + (date.DayOfWeek - DayOfWeek.Monday)) % 7; return date.Date.AddDays(-diff); } } }