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

const registrationStatus = ['APPROVED', 'INCOMPLETE', 'PENDING', 'REJECTED', 'SUSPENDED', 'UNREGISTERED'] as const;
const schema = z.object({
    disableEmailNotification: z.boolean(),
    operatorProfileId: z.string().uuid(),
    actions: z
        .array(
            z.object({
                reasonForChange: z.string(),
                serviceId: z.string().uuid(),
                status: z.enum(registrationStatus),
            })
        )
        .min(1),
});
export type ServicesUpdate = z.infer<typeof schema>;

export const setServicesStatus = async (
    client: Client,
    profileId: string,
    servicesUpdate: ServicesUpdate
): Promise<void> => {
    const resultProfileId = z.string().uuid().safeParse(profileId);
    if (!resultProfileId.success) {
        throw new TypeError('Invalid profileId', {
            cause: resultProfileId.error.issues,
        });
    }

    const resultServices = schema.safeParse(servicesUpdate);
    if (!resultServices.success) {
        throw new TypeError('Invalid servicesUpdate', {
            cause: resultServices.error.issues,
        });
    }

    await client.post(
        `boapi/proxy/user/fleets/${client.clientOptions.fleetId}/profiles/${profileId}/serviceRegistrations`,
        servicesUpdate
    );
};
