import axios from "axios"; import { API_BASE_URL, DEBUG } from "./config"; function debugLog(message, data = null) { if (DEBUG) { console.log(`[DEBUG] ${message}`); if (data) { console.log(data); } } } const NexusAuthApi = { async signup(username, password, email = null) { debugLog("Attempting signup", { username, email }); try { // Construct the payload dynamically to exclude `email` if it's null const payload = { username, password }; if (email) { payload.email = email; } const response = await axios.post(`${API_BASE_URL}/auth/signup`, payload); debugLog("Signup successful", response.data); return response.data; } catch (error) { debugLog("Signup failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async login(username, password) { debugLog("Attempting login", { username }); try { const response = await axios.post( `${API_BASE_URL}/auth/login`, { username, password } ); debugLog("Login successful", response.data); return response.data; } catch (error) { debugLog("Login failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async logout(userId, token) { debugLog("Attempting logout", { userId }); try { const response = await axios.post( `${API_BASE_URL}/auth/logout?user_id=${encodeURIComponent(userId)}&token=${encodeURIComponent(token)}` ); debugLog("Logout successful", response.data); return response.data; } catch (error) { debugLog("Logout failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async validateToken(userId, token) { debugLog("Validating token", { userId, token }); try { const response = await axios.get( `${API_BASE_URL}/auth/validate?user_id=${encodeURIComponent(userId)}&token=${encodeURIComponent(token)}` ); debugLog("Token validation successful", response); return response; } catch (error) { debugLog("Token validation failed", error.response?.data || error); return error; } }, async searchUsers(query) { debugLog("Searching users", { query }); try { const response = await axios.get(`${API_BASE_URL}/auth/search-users`, { params: { query }, }); debugLog("User search successful", response.data); return response.data; } catch (error) { debugLog("User search failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async isUsernameAvailable(query) { debugLog("Searching users", { query }); try { const response = await axios.get(`${API_BASE_URL}/auth/is-username-available`, { params: { query }, }); debugLog("User search successful", response.data); return response.data; } catch (error) { debugLog("User search failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async getUserId(username) { debugLog("Fetching user ID", { username }); try { const response = await axios.get(`${API_BASE_URL}/auth/get-user-id`, { params: { username }, }); debugLog("User ID fetch successful", response.data); return response.data; } catch (error) { debugLog("User ID fetch failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async updateOwnData(userId, updateData, token) { debugLog("Updating own data", { userId, updateData }); try { const response = await axios.put(`${API_BASE_URL}/auth/user/update`, updateData, { params: { user_id: userId, token }, }); debugLog("Update own data successful", response.data); return response.data; } catch (error) { debugLog("Update own data failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, // Admin API async getAllUsers(adminId, token) { debugLog("Fetching all users", { adminId }); try { const response = await axios.get(`${API_BASE_URL}/admin/users`, { params: { user_id: adminId, token } }); debugLog("Fetch all users successful", response.data); return response; } catch (error) { debugLog("Fetch all users failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async getUser(adminId, token, userId) { debugLog("Fetching user details", { adminId, userId }); try { const response = await axios.get(`${API_BASE_URL}/admin/user/${userId}`, { params: { admin_id: adminId, token }, }); debugLog("Fetch user details successful", response.data); return response.data; } catch (error) { debugLog("Fetch user details failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async updateUser(adminId, token, userId, updateData) { debugLog("Updating user", { adminId, userId, updateData }); try { const response = await axios.put(`${API_BASE_URL}/admin/user/${userId}`, updateData, { params: { admin_id: adminId, token } }); debugLog("Update user successful", response.data); return response.data; } catch (error) { debugLog("Update user failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, async updateAccessLevel(adminId, token, userId, accessLevel) { debugLog("Updating access level", { adminId, userId, accessLevel }); try { const response = await axios.put( `${API_BASE_URL}/admin/user/${userId}/access-level`, { access_level: accessLevel }, { params: { admin_id: adminId, token } } ); debugLog("Update access level successful", response.data); return response.data; } catch (error) { debugLog("Update access level failed", error.response?.data || error.message); throw error.response?.data || error.message; } }, }; export default NexusAuthApi;