import { apiRequest, setTokens, clearTokens } from '../lib/api' import { clearActiveBusiness } from '../lib/businessContext' import type { AuthUser, LoginResponse, MeResponse, OtpSendResponse, OtpVerifyResponse, RegisterResponse, SignupStartResponse, SignupVerifyResponse, HandoffCreateResponse, UserProfile, } from '../types/auth' export async function login( cellNumber: string, password: string, domain?: string, ) { const data = await apiRequest('/auth/login', { method: 'POST', body: domain ? { cellNumber, password, domain } : { cellNumber, password }, }) setTokens(data.accessToken, data.refreshToken) return data } export async function register(input: { cellNumber: string password: string firstName: string lastName: string email?: string domain: string acknowledgeExistingAccount?: boolean }) { const data = await apiRequest('/auth/register', { method: 'POST', body: input, }) if (data.accessToken && data.refreshToken) { setTokens(data.accessToken, data.refreshToken) } return data } export async function startSignup(input: { cellNumber: string firstName: string lastName: string domain: string }) { return apiRequest('/auth/signup/start', { method: 'POST', body: input, }) } export async function verifySignupOtp(cellNumber: string, code: string) { return apiRequest('/auth/signup/verify-otp', { method: 'POST', body: { cellNumber, code }, }) } export async function completeSignup(input: { registrationToken: string password?: string }) { const data = await apiRequest('/auth/signup/complete', { method: 'POST', body: input, }) if (data.accessToken && data.refreshToken) { setTokens(data.accessToken, data.refreshToken) } return data } export async function fetchCurrentUser(signal?: AbortSignal) { return apiRequest('/auth/me', { auth: true, signal }) } export async function updateProfile( payload: Partial & { firstName?: string lastName?: string firstNameEn?: string lastNameEn?: string email?: string }, ) { return apiRequest<{ message: string; user: AuthUser }>('/auth/profile', { method: 'PATCH', auth: true, body: payload, }) } export async function changePassword(currentPassword: string, newPassword: string) { return apiRequest<{ message: string }>('/auth/change-password', { method: 'POST', auth: true, body: { currentPassword, newPassword }, }) } export async function sendOtp(cellNumber: string, domain?: string) { return apiRequest('/auth/send-otp', { method: 'POST', body: domain ? { cellNumber, domain } : { cellNumber }, }) } export async function verifyOtp(cellNumber: string, code: string) { return apiRequest('/auth/verify-otp', { method: 'POST', body: { cellNumber, code }, }) } export async function loginWithOtp( cellNumber: string, code: string, domain?: string, ) { const data = await apiRequest('/auth/login-otp', { method: 'POST', body: domain ? { cellNumber, code, domain } : { cellNumber, code }, }) setTokens(data.accessToken, data.refreshToken) return data } export async function resetPassword(cellNumber: string, code: string, newPassword: string) { return apiRequest<{ message: string }>('/auth/reset-password', { method: 'POST', body: { cellNumber, code, newPassword }, }) } export async function createHandoff() { return apiRequest('/auth/handoff', { method: 'POST', auth: true, }) } export function logout() { clearTokens() clearActiveBusiness() }