import { type AxiosError, type AxiosResponse } from "axios"; import Report from "@/ApiClasses/Repport"; import ProjectDecision from "@/ApiClasses/ProjectDecision"; //import UserAdmin from "@/ApiClasses/UserAdmin"; import { axiosInstance, defaultApiErrorHandler, defaultApiSuccessHandler, } from "@/services/api"; // Admin API function getPendingAccounts( onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .get("/admin/pending-accounts") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function validateUserAccount( userId: number, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post(`/admin/accounts/validate/${userId}`) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function getPendingProjectJoinRequests( // Not yet implemented onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .get("/admin/request-join") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function decideProjectJoinRequest( // Not yet implemented joinRequestId: number, decision: { isAccepted: boolean }, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post(`/admin/request-join/decision/${joinRequestId}`, decision) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function getAdminProjects( onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .get("/admin/projects") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } type ProjectCreatePayload = { projectName: string; logo?: string; }; function addProjectManually( payload: ProjectCreatePayload, onSuccess?: (response: AxiosResponse) => void, onError?: (error: AxiosError) => void ): void { axiosInstance .post("/admin/projects", payload) .then((response) => onSuccess?.(response)) .catch((error: AxiosError) => onError?.(error)); } function getPendingProjects( onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .get("/admin/projects/pending") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function decidePendingProject( decision: ProjectDecision, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post(`/admin/projects/pending/decision`, decision.toObject()) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function createAppointmentReport( appointmentId: number, reportContent: Report, // Replace 'any' with a proper type for report content if available onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post(`/admin/appointments/report/${appointmentId}`, reportContent) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function updateAppointmentReport( appointmentId: number, reportContent: Report, // Replace 'any' with a proper type for report content if available onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .put(`/admin/appointments/report/${appointmentId}`, reportContent) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function getUpcomingAppointments( onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .get("/admin/appointments/upcoming") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function removeProject( projectId: number, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .delete(`/admin/projects/${projectId}`) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function grantAdminRights( userId: number, onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post(`/admin/make-admin/${userId}`) .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } function createAdmin( onSuccessHandler?: (response: AxiosResponse) => void, onErrorHandler?: (error: AxiosError) => void ): void { axiosInstance .post("/admin/create-account") .then((response) => { if (onSuccessHandler) { onSuccessHandler(response); } else { defaultApiSuccessHandler(response); } }) .catch((error: AxiosError) => { if (onErrorHandler) { onErrorHandler(error); } else { defaultApiErrorHandler(error); } }); } export { axiosInstance, //requestJoinProject, // Not yet implemented [cite: 4] getPendingAccounts, validateUserAccount, getPendingProjectJoinRequests, // Not yet implemented [cite: 3] decideProjectJoinRequest, // Not yet implemented [cite: 3] getAdminProjects, addProjectManually, getPendingProjects, decidePendingProject, createAppointmentReport, updateAppointmentReport, getUpcomingAppointments, removeProject, grantAdminRights, createAdmin, };