using LCU.Library.Internal.IncentiveApiModels.Entities; using LCU.Library.Internal.IncentiveApiModels.Enums; namespace LCU.API.Internal.Operations.IncentiveApi.Services.AutoDecision; public class ReferralDecisionStrategy : IDecisionStrategy { public bool CanDecideActivity(Activity activity) { return activity.Type == ActivityType.Referral && (activity.Product == Product.ATMCard || activity.Product == Product.CheckCard || activity.Product == Product.NewChecking || activity.Product == Product.Mortgage || activity.Product == Product.DirectDeposit || activity.Product == Product.CreditCardBalanceTransfer || activity.Product == Product.LIC || activity.Product == Product.FirstMortgageReferral || activity.Product == Product.eStatement); } public async Task DecideActivity(Activity activity) { if (activity.Product == Product.LIC) { if (!string.IsNullOrWhiteSpace(activity.Detail.StationName)) { if (activity.Detail.StationName.Equals("LIC Referral-Qualified", StringComparison.InvariantCultureIgnoreCase)) { return await Task.FromResult(new ActivityStateChange() { AcceptedDate = activity.Accepted.Date.AddHours(12), ActivityId = activity.Id, Note = "LIC Referral In Station 'LIC Referral-Qualified'.", State = ActivityState.Accepted }); } if (activity.Detail.StationName.Equals("LIC Referral- Not Qualified", StringComparison.InvariantCultureIgnoreCase)) { return await Task.FromResult(new ActivityStateChange() { AcceptedDate = activity.Accepted.Date.AddHours(12), ActivityId = activity.Id, Note = "LIC Referral In Station 'LIC Referral- Not Qualified'.", State = ActivityState.Rejected }); } } return await Task.FromResult(new ActivityStateChange { AcceptedDate = activity.Accepted.Date.AddHours(12), ActivityId = activity.Id, Note = "LIC Referral Not In Final Station. Waiting for Manual Review or Station Update.", State = ActivityState.ManualReview }); } var daysBeforeExpiration = activity.Product != Product.FirstMortgageReferral ? "60" : "120"; return await Task.FromResult(new ActivityStateChange { AcceptedDate = activity.Accepted.Date.AddHours(12), ActivityId = activity.Id, Note = $"Waiting for Matching Sale. Expires in {daysBeforeExpiration} days from creation.", State = ActivityState.PendingReferral }); } }