import { Client } from '@vulog/aima-client';
import { createPaginableOptionsSchema, PaginableOptions, PaginableResponse } from '@vulog/aima-core';
// import { z } from 'zod';

import { BillingGroup } from './types';

export const getFleetBillingGroups = async (
    client: Client,
    options?: PaginableOptions
): Promise<PaginableResponse<BillingGroup>> => {
    const PaginableOptionsSchema = createPaginableOptionsSchema();

    const resultOptions = PaginableOptionsSchema.safeParse(options ?? {});
    if (!resultOptions.success) {
        throw new TypeError('Invalid options', {
            cause: resultOptions.error.issues,
        });
    }

    const finalOptions = resultOptions.data;

    const searchParams = new URLSearchParams();
    searchParams.append('page', finalOptions.page!.toString());
    searchParams.append('size', finalOptions.pageSize!.toString());

    return client
        .get<BillingGroup[]>(
            `/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/billingGroup?${searchParams.toString()}`
        )
        .then(({ data, headers }) => {
            return {
                data,
                page: headers.number,
                pageSize: headers.size,
                total: headers.totalelements,
                totalPages: headers.totalpages,
            };
        })
        .catch((error) => {
            throw new Error(`Failed to get fleet billing groups: ${error.message}`);
        });
};
