import { useMutation, useQueryClient } from '@tanstack/vue-query' import type { Ref } from 'vue' import { apiClient } from '@/lib/axios' interface ApiResponse { success: boolean data: T message: string } export interface UpdateProfilePayload { first_name: string last_name: string phone?: string | null date_of_birth?: string | null timezone: string locale: string } export interface ChangePasswordPayload { current_password: string password: string password_confirmation: string } export interface ChangeEmailPayload { new_email: string password: string app: 'app' | 'portal' | 'admin' } export interface AdminChangeEmailPayload { new_email: string } export function useUpdateProfile() { const queryClient = useQueryClient() return useMutation({ mutationFn: async (payload: UpdateProfilePayload) => { const { data } = await apiClient.put>( '/me/profile', payload, ) return data }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['auth', 'me'] }) }, }) } export function useChangePassword() { return useMutation({ mutationFn: async (payload: ChangePasswordPayload) => { const { data } = await apiClient.post>( '/me/change-password', payload, ) return data }, }) } export function useChangeEmail() { return useMutation({ mutationFn: async (payload: ChangeEmailPayload) => { const { data } = await apiClient.post>( '/me/change-email', payload, ) return data }, }) } export function useAdminChangeEmail(orgId: Ref) { return useMutation({ mutationFn: async ({ userId, newEmail }: { userId: string; newEmail: string }) => { const { data } = await apiClient.post>( `/organisations/${orgId.value}/members/${userId}/change-email`, { new_email: newEmail }, ) return data }, }) }