import { LeaveMaster, LeaveMasterCreateRequest, LeaveMasterUpdateRequest } from '../types'; import apiClient from '@/lib/api/axios-instance'; import { createHeaders } from '@/lib/api'; import { API_BASE_URL } from '../config'; import axios from 'axios'; export const leaveMasterApi = { getAll: async (): Promise => { try { console.log('LeaveMasterApi: Fetching all leave types'); const response = await apiClient.get(`/api/LeavesMaster`); console.log(`LeaveMasterApi: Successfully fetched ${response.data.length} leave types`); return response.data; } catch (error) { console.error('LeaveMasterApi: Error fetching leave types:', error); return []; } }, getById: async (id: number): Promise => { try { console.log(`LeaveMasterApi: Fetching leave type with ID ${id}`); const response = await apiClient.get(`/api/LeavesMaster/${id}`); console.log(`LeaveMasterApi: Successfully fetched leave type with ID ${id}`); return response.data; } catch (error) { console.error(`LeaveMasterApi: Error fetching leave type with ID ${id}:`, error); return null; } }, getActive: async (): Promise => { try { console.log('LeaveMasterApi: Fetching active leave types'); const response = await apiClient.get(`/api/LeavesMaster/active`); console.log(`LeaveMasterApi: Successfully fetched ${response.data.length} active leave types`); return response.data; } catch (error) { console.error('LeaveMasterApi: Error fetching active leave types:', error); return []; } }, create: async (leaveMaster: LeaveMasterCreateRequest): Promise => { try { console.log('LeaveMasterApi: Creating new leave type', leaveMaster); const response = await apiClient.post(`/api/LeavesMaster`, leaveMaster); console.log('LeaveMasterApi: Successfully created new leave type', response.data); return response.data; } catch (error) { console.error('LeaveMasterApi: Error creating leave type:', error); throw error; } }, update: async (id: number, leaveMaster: LeaveMasterUpdateRequest): Promise => { try { console.log(`LeaveMasterApi: Updating leave type with ID ${id}`, leaveMaster); const response = await apiClient.put(`/api/LeavesMaster/${id}`, leaveMaster); if (response.status === 204) { console.log(`LeaveMasterApi: Successfully updated leave type with ID ${id}, but no content returned.`); return null; // or return any other appropriate value when there's no content } else { console.log(`LeaveMasterApi: Successfully updated leave type with ID ${id}`, response.data); return response.data; } } catch (error) { console.error(`LeaveMasterApi: Error updating leave type with ID ${id}:`, error); throw error; } }, delete: async (id: number): Promise => { try { console.log(`LeaveMasterApi: Deleting leave type with ID ${id}`); await apiClient.delete(`/api/LeavesMaster/${id}`); console.log(`LeaveMasterApi: Successfully deleted leave type with ID ${id}`); return true; } catch (error) { console.error(`LeaveMasterApi: Error deleting leave type with ID ${id}:`, error); throw error; } }, toggleStatus: async (id: number, isActive: boolean): Promise => { try { console.log(`LeaveMasterApi: Toggling status to ${isActive} for leave type with ID ${id}`); const response = await apiClient.patch(`/api/LeavesMaster/${id}/status`, { isActive }, { headers: createHeaders(true), withCredentials: false }); console.log(`LeaveMasterApi: Successfully toggled status for leave type with ID ${id}`, response.data); return response.data; } catch (error) { console.error(`LeaveMasterApi: Error toggling status for leave type with ID ${id}:`, error); throw error; } }, getByRole: async (roleId: number): Promise => { try { console.log(`LeaveMasterApi: Fetching leave types for role ID ${roleId}`); const response = await apiClient.get(`/api/LeavesMaster/role/${roleId}`); console.log(`LeaveMasterApi: Successfully fetched ${response.data.length} leave types for role ID ${roleId}`); return response.data; } catch (error) { console.error(`LeaveMasterApi: Error fetching leave types for role ID ${roleId}:`, error); return []; } } };