export interface RecurringPaymentSummaryItem { label: string; amount?: number; startDate?: Date; endDate?: Date; intervalCount?: number; intervalUnit?: IntervalUnit; } export interface RecurringPaymentRequest { paymentDescription: string; regularBilling: RecurringPaymentSummaryItem; trialBilling?: RecurringPaymentSummaryItem; billingAgreement?: string; managementURL: string; tokenNotificationURL?: string; } export enum IntervalUnit { minute = 'minute', hour = 'hour', day = 'day', month = 'month', year = 'year', } export function intervalUnitFromJson(json: any): IntervalUnit { switch (json?.toLowerCase()) { case 'minute': return IntervalUnit.minute; case 'hour': return IntervalUnit.hour; case 'day': return IntervalUnit.day; case 'month': return IntervalUnit.month; case 'year': return IntervalUnit.year; default: return IntervalUnit.month; } } export function intervalUnitToJson(intervalUnit: IntervalUnit): string { return intervalUnit; } export function recurringPaymentSummaryItemFromJson( json: { [key: string]: any } ): RecurringPaymentSummaryItem { return { label: json.label, amount: json.amount, startDate: json.start_date ? new Date(json.start_date) : undefined, endDate: json.end_date ? new Date(json.end_date) : undefined, intervalCount: json.interval_count, intervalUnit: json.interval_unit ? intervalUnitFromJson(json.interval_unit) : undefined, }; } export function recurringPaymentSummaryItemToJson( item: RecurringPaymentSummaryItem ): { [key: string]: any } { return { label: item.label, amount: item.amount, start_date: item.startDate?.getTime(), end_date: item.endDate?.getTime(), interval_count: item.intervalCount, interval_unit: item.intervalUnit ? intervalUnitToJson(item.intervalUnit) : undefined, }; } export function recurringPaymentRequestFromJson( json: { [key: string]: any } ): RecurringPaymentRequest { return { paymentDescription: json.payment_description, regularBilling: recurringPaymentSummaryItemFromJson(json.regular_billing), managementURL: json.management_url, trialBilling: json.trial_billing ? recurringPaymentSummaryItemFromJson(json.trial_billing) : undefined, billingAgreement: json.billing_agreement, tokenNotificationURL: json.token_notification_url, }; } export function recurringPaymentRequestToJson( request: RecurringPaymentRequest ): { [key: string]: any } { return { payment_description: request.paymentDescription, regular_billing: recurringPaymentSummaryItemToJson(request.regularBilling), management_url: request.managementURL, trial_billing: request.trialBilling ? recurringPaymentSummaryItemToJson(request.trialBilling) : undefined, billing_agreement: request.billingAgreement, token_notification_url: request.tokenNotificationURL, }; }