import { Client } from '@vulog/aima-client';
import { z } from 'zod';

import { Invoice, ManualPayment } from './types';

const schema = z.object({
    invoiceId: z.string().trim().min(1).uuid(),
    manualPayment: z.object({
        requiresActionReturnUrl: z.string().default(''),
        online: z.boolean().default(true),
        scope: z.enum(['RENTAL', 'DEPOSIT']),
    }),
});

export const payInvoice = async (client: Client, invoiceId: string, manualPayment: ManualPayment) => {
    const result = schema.safeParse({ invoiceId, manualPayment });
    if (!result.success) {
        throw new TypeError('Invalid args', {
            cause: result.error.issues,
        });
    }

    return client
        .post<Invoice>(
            `/boapi/proxy/billing/fleets/${client.clientOptions.fleetId}/invoices/${result.data.invoiceId}/payment`,
            result.data.manualPayment
        )
        .then(({ data }) => data);
};
