public Result RunBusinessRuleEngine(PaymentType type)
        {
            switch (type)
            {
            case PaymentType.PHYSICAL_PRODUCT:
            {
                var generateCommissionPayment = new GenerateCommissionPayment();
                var packingSlip = new GeneratePackingSlip(generateCommissionPayment);
                return(packingSlip.Process());
            }

            case PaymentType.BOOK:
            {
                var generateCommissionPayment = new GenerateCommissionPayment();
                var GeneratePackingSlipForRoyaltyDepartment = new GeneratePackingSlipForRoyaltyDepartment(generateCommissionPayment);
                return(GeneratePackingSlipForRoyaltyDepartment.Process());
            }

            case PaymentType.MEMBERSHIP_ACTIVATE:
            {
                var sendEmailNotifification = new EMailNotification();
                var activateMemberShip      = new ActivateMemberShip(sendEmailNotifification);
                return(activateMemberShip.Process());
            }

            case PaymentType.MEMBERSHIP_UPGRADE:
            {
                var sendEmailNotifification = new EMailNotification();
                var applyUpgrade            = new ApplyUpgrade(sendEmailNotifification);
                return(applyUpgrade.Process());
            }

            case PaymentType.VIDEO:
            {
                var addFirstAidVideo = new AddFirstAidVideo();
                var packingSlip      = new GeneratePackingSlip(addFirstAidVideo);
                return(packingSlip.Process());
            }

            default:
                return(new Result((int)Status.FAIL, "payment type is not found"));
            }
        }
        public Response RunBusinessRuleEngine(PaymentType type)
        {
            switch (type)
            {
            case PaymentType.PHYSICAL_PRODUCT:
            {
                var createCommissionPayment = new ProcessCommissionPayment();
                var packingSlip             = new PhysicalProductPackingSlip(createCommissionPayment);
                return(packingSlip.Process());
            }

            case PaymentType.BOOK:
            {
                var createCommissionPayment = new ProcessCommissionPayment();
                var GeneratePackingSlipForRoyaltyDepartment = new CreateDuplicateSlipForRoyaldepartment(createCommissionPayment);
                return(GeneratePackingSlipForRoyaltyDepartment.Process());
            }

            case PaymentType.MEMBERSHIP_ACTIVATE:
            {
                var sendEmailNotifification = new NotifyEmail();
                var activateMemberShip      = new ActivateMemeberShip(sendEmailNotifification);
                return(activateMemberShip.Process());
            }

            case PaymentType.MEMBERSHIP_UPGRADE:
            {
                var sendEmailNotifification = new NotifyEmail();
                var applyUpgrade            = new UpgradeMembership(sendEmailNotifification);
                return(applyUpgrade.Process());
            }

            case PaymentType.VIDEO:
            {
                var addFirstAidVideo = new AddFirstAidVideo();
                var packingSlip      = new PhysicalProductPackingSlip(addFirstAidVideo);
                return(packingSlip.Process());
            }

            default:
                return(new Response((int)Status.FAIL, "payment type is not found"));
            }
        }