import { createAsyncThunk } from '@reduxjs/toolkit'; import { loginApi, verifyOtpApi, updateProfileApi, logoutApi } from '../../../api/authApi'; import { tokenManager } from '../../../services/apiClient'; // ─── Login ─────────────────────────────────────────────────────────────────── export const loginWithPhone = createAsyncThunk( 'auth/loginWithPhone', async (mobileNumber: string, { rejectWithValue }) => { try { const response = await loginApi(mobileNumber); return response; } catch (error: unknown) { const message = error instanceof Error ? error.message : 'Login failed'; return rejectWithValue(message); } }, ); // ─── Verify OTP ────────────────────────────────────────────────────────────── export const verifyOtp = createAsyncThunk( 'auth/verifyOtp', async ( { mobileNumber, otp }: { mobileNumber: string; otp: string }, { rejectWithValue }, ) => { try { const response = await verifyOtpApi(mobileNumber, otp); // Persist tokens on successful verification if (response.accessToken && response.refreshToken) { await tokenManager.setTokens( response.accessToken, response.refreshToken, ); } return response; } catch (error: unknown) { const message = error instanceof Error ? error.message : 'OTP verification failed'; return rejectWithValue(message); } }, ); // ─── Update Profile ────────────────────────────────────────────────────────── export const updateProfile = createAsyncThunk( 'auth/updateProfile', async ( data: { name: string; email: string; locationLabels: string[] }, { rejectWithValue }, ) => { try { const response = await updateProfileApi(data); return response; } catch (error: unknown) { const message = error instanceof Error ? error.message : 'Profile update failed'; return rejectWithValue(message); } }, ); // ─── Logout ────────────────────────────────────────────────────────────────── export const logoutUser = createAsyncThunk( 'auth/logoutUser', async (_, { rejectWithValue }) => { try { const response = await logoutApi(); await tokenManager.clearTokens(); return response; } catch (error: unknown) { // Clear tokens even if API call fails await tokenManager.clearTokens(); const message = error instanceof Error ? error.message : 'Logout failed'; return rejectWithValue(message); } }, );