using LCU.Library.Internal.IncentiveApiModels.Entities; using LCU.Library.Internal.IncentiveApiModels.Enums; namespace LCU.API.Internal.Operations.IncentiveApi.Services.AutoDecision; public class DebtProtectionDecisionStrategy : IDecisionStrategy { private const Product DecidableProduct = Product.DebtProtection; public bool CanDecideActivity(Activity activity) { return activity.Product == DecidableProduct; } public async Task DecideActivity(Activity activity) { if ( activity.MatchingDpAccessoryActivityId != 0 && activity.Detail.DebtProtectionAddDate != null && activity.Detail.DebtProtectionRemoveDate == null ) { return await Task.FromResult(new ActivityStateChange { AcceptedDate = activity.Detail.DebtProtectionAddDate?.AddHours(12), ActivityId = activity.Id, ActivityMatchId = activity.MatchingDpAccessoryActivityId, Note = $"{DecidableProduct} Added From Activity Id: {activity.MatchingDpAccessoryActivityId}, Auto-Decision: {ActivityState.Accepted}", State = ActivityState.Accepted }); } if ( activity.MatchingDpAccessoryActivityId != 0 && activity.Detail.DebtProtectionAddDate != null && activity.Detail.DebtProtectionRemoveDate != null ) { return await Task.FromResult(new ActivityStateChange { AcceptedDate = activity.Detail.DebtProtectionRemoveDate?.AddHours(12), ActivityId = activity.Id, ActivityMatchId = activity.MatchingDpAccessoryActivityId, Note = $"Debt Protection Removed From Activity Id: {activity.MatchingDpAccessoryActivityId}, Auto-Decision: {ActivityState.Rejected}", State = ActivityState.Rejected }); } return await Task.FromResult(new ActivityStateChange { AcceptedDate = activity.Accepted.Date.AddHours(12), ActivityId = activity.Id, Note = $"Unable To Auto-Decision: {ActivityState.ManualReview}", State = ActivityState.ManualReview }); } }