import axios from 'axios'; import type { User } from '../../share/types.ts'; interface AuthLoginResponse { message: string; token: string; refreshToken?: string; user: User; } interface AuthResponse { message: string; [key: string]: any; } interface AuthAPIType { login: (username: string, password: string, latitude?: number, longitude?: number) => Promise; register: (username: string, email: string, password: string) => Promise; logout: () => Promise; getCurrentUser: () => Promise; updateUser: (userId: number, userData: Partial) => Promise; changePassword: (oldPassword: string, newPassword: string) => Promise; requestPasswordReset: (email: string) => Promise; resetPassword: (token: string, newPassword: string) => Promise; } export const AuthAPI: AuthAPIType = { login: async (username: string, password: string, latitude?: number, longitude?: number) => { try { const response = await axios.post('/auth/login', { username, password, latitude, longitude }); return response.data; } catch (error) { throw error; } }, register: async (username: string, email: string, password: string) => { try { const response = await axios.post('/auth/register', { username, email, password }); return response.data; } catch (error) { throw error; } }, logout: async () => { try { const response = await axios.post('/auth/logout'); return response.data; } catch (error) { throw error; } }, getCurrentUser: async () => { try { const response = await axios.get('/auth/me'); return response.data; } catch (error) { throw error; } }, updateUser: async (userId: number, userData: Partial) => { try { const response = await axios.put(`/auth/users/${userId}`, userData); return response.data; } catch (error) { throw error; } }, changePassword: async (oldPassword: string, newPassword: string) => { try { const response = await axios.post('/auth/change-password', { oldPassword, newPassword }); return response.data; } catch (error) { throw error; } }, requestPasswordReset: async (email: string) => { try { const response = await axios.post('/auth/request-password-reset', { email }); return response.data; } catch (error) { throw error; } }, resetPassword: async (token: string, newPassword: string) => { try { const response = await axios.post('/auth/reset-password', { token, newPassword }); return response.data; } catch (error) { throw error; } } };