import axios from 'axios'; import { API_BASE_URL } from '@/config'; import apiClient from '@/lib/api/axios-instance'; import { createHeaders } from '@/lib/api'; import { Holiday, HolidayCreateRequest, HolidayUpdateRequest } from '@/types'; class HolidayApi { private baseUrl = `/api/Holiday`; async getAll(): Promise { try { console.log('HolidayApi: Fetching all holiday records from', this.baseUrl); const response = await apiClient.get(this.baseUrl, { headers: createHeaders(true), withCredentials: false }); if (!response.data) { console.warn('HolidayApi: No data in response'); return []; } if (!Array.isArray(response.data)) { console.warn('HolidayApi: Response is not an array', response.data); return []; } console.log(`HolidayApi: Successfully fetched ${response.data.length} holiday records`); return response.data; } catch (error) { if (apiClient.isAxiosError(error)) { console.error('HolidayApi: Axios error fetching holiday records:', error.message); if (error.response) { console.error('HolidayApi: Response status:', error.response.status); console.error('HolidayApi: Response data:', error.response.data); } else if (error.request) { console.error('HolidayApi: No response received from server'); } else { console.error('HolidayApi: Error setting up request:', error.message); } } else { console.error('HolidayApi: Unknown error fetching holiday records:', error); } return []; } } async getById(id: number): Promise { try { console.log(`HolidayApi: Fetching holiday record with ID ${id}`); const response = await apiClient.get(`${this.baseUrl}/${id}`); console.log(`HolidayApi: Successfully fetched holiday record with ID ${id}`); return response.data; } catch (error) { if (apiClient.isAxiosError(error)) { console.error(`HolidayApi: Error fetching holiday record ${id}:`, error.message); if (error.response) { console.error('HolidayApi: Response status:', error.response.status); } } else { console.error(`HolidayApi: Unknown error fetching holiday record ${id}:`, error); } return null; } } async create(holiday: HolidayCreateRequest): Promise { try { console.log('HolidayApi: Creating new holiday record', holiday); const response = await apiClient.post(this.baseUrl, holiday, { headers: createHeaders(true), withCredentials: false }); console.log('HolidayApi: Successfully created new holiday record', response.data); return response.data; } catch (error) { if (apiClient.isAxiosError(error)) { console.error('HolidayApi: Error creating holiday record:', error.message); if (error.response) { console.error('HolidayApi: Response status:', error.response.status); console.error('HolidayApi: Response data:', error.response.data); } } else { console.error('HolidayApi: Unknown error creating holiday record:', error); } return null; } } async update(id: number, holiday: HolidayUpdateRequest): Promise { try { console.log(`HolidayApi: Updating holiday record with ID ${id}`, holiday); const response = await apiClient.put(`${this.baseUrl}/${id}`, holiday); console.log(`HolidayApi: Successfully updated holiday record with ID ${id}`, response.data); return response.data; } catch (error) { if (apiClient.isAxiosError(error)) { console.error(`HolidayApi: Error updating holiday record ${id}:`, error.message); if (error.response) { console.error('HolidayApi: Response status:', error.response.status); console.error('HolidayApi: Response data:', error.response.data); } } else { console.error(`HolidayApi: Unknown error updating holiday record ${id}:`, error); } return null; } } async delete(id: number): Promise { try { console.log(`HolidayApi: Deleting holiday record with ID ${id}`); const response = await apiClient.delete(`${this.baseUrl}/${id}`); console.log(`HolidayApi: Successfully deleted holiday record with ID ${id}`); return true; } catch (error) { if (apiClient.isAxiosError(error)) { console.error(`HolidayApi: Error deleting holiday record ${id}:`, error.message); if (error.response) { console.error('HolidayApi: Response status:', error.response.status); } } else { console.error(`HolidayApi: Unknown error deleting holiday record ${id}:`, error); } return false; } } } export const holidayApi = new HolidayApi();