using LCU.Library.Internal.IncentiveApiModels.Entities; using LCU.Library.Internal.IncentiveApiModels.Enums; namespace LCU.API.Internal.Operations.IncentiveApiLib.Extensions; public static class ActivityExtensions { public static StateChangeRequirement RequiredToChangeState(this Activity activity, ActivityState targetState) { return activity.State switch { ActivityState.Accepted => targetState switch { ActivityState.Accepted => StateChangeRequirement.AdminOrPermission, ActivityState.ManualReview => StateChangeRequirement.AdminOrPermission, ActivityState.PendingReferral when activity.Type == ActivityType.Referral => StateChangeRequirement.AdminOrPermission, ActivityState.PendingTransfer => StateChangeRequirement.AdminOrPermission, ActivityState.Rejected => StateChangeRequirement.AdminOrPermission, _ => StateChangeRequirement.NotAllowed }, ActivityState.Created => targetState switch { ActivityState.Accepted => StateChangeRequirement.SystemOnly, ActivityState.ManualReview => StateChangeRequirement.SystemOnly, ActivityState.PendingReferral => StateChangeRequirement.SystemOnly, ActivityState.Rejected => StateChangeRequirement.SystemOnly, _ => StateChangeRequirement.NotAllowed }, ActivityState.ManualReview => targetState switch { ActivityState.Accepted => StateChangeRequirement.AdminOrPermission, ActivityState.Rejected => StateChangeRequirement.Hierarchical, _ => StateChangeRequirement.SystemOnly }, ActivityState.PendingReferral => targetState switch { ActivityState.Accepted => StateChangeRequirement.AdminOrPermission, ActivityState.Transferred => StateChangeRequirement.Hierarchical, _ => StateChangeRequirement.NotAllowed }, ActivityState.PendingTransfer => targetState switch { ActivityState.Accepted => StateChangeRequirement.AdminOrPermission, ActivityState.Transferred => StateChangeRequirement.Hierarchical, _ => StateChangeRequirement.NotAllowed }, ActivityState.Rejected => targetState switch { ActivityState.Accepted => StateChangeRequirement.AdminOrPermission, ActivityState.ManualReview => StateChangeRequirement.AdminOrPermission, ActivityState.PendingReferral when activity.Type == ActivityType.Referral => StateChangeRequirement.AdminOrPermission, _ => StateChangeRequirement.NotAllowed }, ActivityState.Transferred => StateChangeRequirement.NotAllowed, _ => StateChangeRequirement.NotAllowed }; } }