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

import { accountStatus, User, UserUpdateBody } from './types';

const schema = z.object({
    id: z.string().trim().min(1).uuid(),
    user: z
        .object({
            locale: z.string(),
            accountStatus: z.enum(accountStatus),
            dataPrivacyConsent: z.boolean(),
            marketingConsent: z.boolean(),
            surveyConsent: z.boolean(),
            shareDataConsent: z.boolean(),
            profilingConsent: z.boolean(),
            membershipNumber: z.string(),
        })
        .partial(),
});

export const updateUser = async (client: Client, id: string, user: UserUpdateBody): Promise<User> => {
    const result = schema.safeParse({ id, user });
    if (!result.success) {
        throw new TypeError('Invalid args', {
            cause: result.error.issues,
        });
    }
    return client
        .post<User>(`/boapi/proxy/user/fleets/${client.clientOptions.fleetId}/users/${id}`, user)
        .then(({ data }) => data);
};
