import { cloneDeep, isNil } from 'lodash' import { DEFAULT_INSTALLMENTS_AMOUNT, Intervals, PaymentProviders, Plan } from '../../../models' import { PaymentMethods } from '../enums/payment-methods.enum' import { Person } from '../models/person.model' const DEFAULT_FULL_INSTALLMENTS_AMOUNT = 12 export class SmartfitPlanHelper { static makePlanWithSmartfitPaymentProvider(person: Person, plan: Plan): Plan { const newPlan = cloneDeep(plan) const addonsInstallments = person.getInstallmentsMap() newPlan.addInstallmentsToPaymentProviders({ ...Object.keys(addonsInstallments) .concat([newPlan.getPaymentProvider(PaymentProviders.SMARTFIT).code]) .reduce( (addons, addonCode) => ({ ...addons, [addonCode]: SmartfitPlanHelper.calculateInstallments(person, newPlan, addonsInstallments[addonCode]), }), addonsInstallments, ), }) return newPlan } private static calculateInstallments(person: Person, plan: Plan, installmentsBySmartfit: number): number { const isAnnually = plan.interval === Intervals.YEARLY const isCreditCard = person.paymentMethod === PaymentMethods.credit if (isNil(installmentsBySmartfit)) return isAnnually ? DEFAULT_FULL_INSTALLMENTS_AMOUNT : DEFAULT_INSTALLMENTS_AMOUNT return isCreditCard ? installmentsBySmartfit : DEFAULT_INSTALLMENTS_AMOUNT } }