import axios from 'axios'; import { API_BASE_URL } from '@/config'; import apiClient from '@/lib/api/axios-instance'; import { createHeaders } from '@/lib/api'; import { AttendanceRecord, AttendanceUploadRequest, AttendanceResponse } from '@/types'; class AttendanceApi { private baseUrl = `/api/Attendance`; async getAll(): Promise { try { console.log('AttendanceApi: Fetching all attendance records from', this.baseUrl); const response = await apiClient.get(this.baseUrl); console.log('AttendanceApi: Response status', response.status); if (!response.data) { console.warn('AttendanceApi: No data in response'); return []; } if (!Array.isArray(response.data)) { console.warn('AttendanceApi: Response is not an array', response.data); return []; } return response.data; } catch (error) { console.error('Error fetching attendance records:', error); return []; } } async getByEmployeeId(employeeId: number): Promise { try { const response = await apiClient.get(`${this.baseUrl}/employee/${employeeId}`); return response.data || []; } catch (error) { console.error(`Error fetching attendance for employee ${employeeId}:`, error); return []; } } async getByMonth(month: number, year: number): Promise { try { const response = await apiClient.get(`${this.baseUrl}/month/${year}/${month}`); return response.data || []; } catch (error) { console.error(`Error fetching attendance for ${month}/${year}:`, error); return []; } } async getToday(employeeId: number): Promise { try { const response = await apiClient.get(`${this.baseUrl}/today/${employeeId}`); return response.data || null; } catch (error) { console.error(`Error fetching today's attendance for employee ${employeeId}:`, error); return null; } } async checkIn(employeeId: number): Promise { const response = await apiClient.post(`${this.baseUrl}/check-in`, { employeeId }); return response.data; } async checkOut(employeeId: number): Promise { const response = await apiClient.post(`${this.baseUrl}/check-out`, { employeeId }); return response.data; } async create(record: AttendanceRecord): Promise { try { const response = await apiClient.post(this.baseUrl, record); return response.data; } catch (error) { console.error('Error creating attendance record:', error); throw error; } } async update(id: number, record: AttendanceRecord): Promise { try { const response = await apiClient.put(`${this.baseUrl}/${id}`, record); return response.data; } catch (error) { console.error(`Error updating attendance record ${id}:`, error); throw error; } } async uploadBulk(data: AttendanceUploadRequest): Promise { try { const response = await apiClient.post(`${this.baseUrl}/bulk`, data); return response.data; } catch (error) { console.error('Error uploading bulk attendance:', error); throw error; } } // Method to handle Excel file upload async uploadExcel(file: File): Promise { try { const formData = new FormData(); formData.append('File', file); const response = await apiClient.post(`${this.baseUrl}/upload-excel`, formData); return response.data; } catch (error) { console.error('Error uploading attendance Excel file:', error); throw error; } } async delete(id: number): Promise { try { await apiClient.delete(`${this.baseUrl}/${id}`); } catch (error) { console.error(`Error deleting attendance record ${id}:`, error); throw error; } } } export const attendanceApi = new AttendanceApi();