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

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

const schema = z.object({
    productId: z.string().trim().min(1).uuid(),
    serviceId: z.string().trim().min(1).uuid().nullable().optional(),
    amount: z.number().min(0),
    userId: z.string().trim().min(1).uuid(),
    entityId: z.string().trim().min(1).uuid(),
    subscriptionId: z.string().trim().min(1).uuid().nullable().optional(),
    productNotes: z.string().trim().nullable().optional(),
    originId: z.string().trim().nullable().optional(),
    chargeProductRequestId: z.string().trim().min(1).uuid().nullable().optional(),
});

export const chargeProduct = async (client: Client, info: ChargeProductInfo) => {
    const result = schema.safeParse(info);
    if (!result.success) {
        throw new TypeError('Invalid args', {
            cause: result.error.issues,
        });
    }

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