import { api } from '../api' export interface PortalProfile { employee: { id: string uniqueEmployeeId: string firstName: string lastName: string firstNameAr?: string | null lastNameAr?: string | null email: string department?: { name: string; nameAr?: string | null } position?: { title: string; titleAr?: string | null } } stats: { activeLoansCount: number pendingLeavesCount: number pendingPurchaseRequestsCount: number leaveBalance: Array<{ leaveType: string totalDays: number carriedOver: number usedDays: number available: number }> } } export interface Loan { id: string loanNumber: string type: string amount: number currency: string installments: number monthlyAmount?: number reason?: string | null status: string approvedBy?: string | null approvedAt?: string | null rejectedReason?: string | null startDate?: string | null endDate?: string | null createdAt: string installmentsList?: Array<{ id: string installmentNumber: number dueDate: string amount: number paidDate?: string | null status: string }> } export interface Leave { id: string leaveType: string startDate: string endDate: string days: number reason?: string | null status: string approvedBy?: string | null approvedAt?: string | null rejectedReason?: string | null createdAt: string } export interface PortalOvertimeRequest { id: string attendanceId: string date: string hours: number reason: string status: string rejectedReason?: string createdAt: string employee?: { id: string firstName: string lastName: string uniqueEmployeeId: string reportingToId?: string } } export interface PurchaseRequest { id: string requestNumber: string items: any[] totalAmount?: number | null reason?: string | null priority: string status: string approvedBy?: string | null approvedAt?: string | null rejectedReason?: string | null createdAt: string } export interface Attendance { id: string date: string checkIn?: string | null checkOut?: string | null workHours?: number | null overtimeHours?: number | null status: string } export interface ManagedLeave { id: string leaveType: string startDate: string endDate: string days: number status: string reason?: string rejectedReason?: string employee: { id: string firstName: string lastName: string uniqueEmployeeId: string reportingToId?: string } } export interface Salary { id: string month: number year: number basicSalary: number allowances: number deductions: number commissions: number overtimePay: number netSalary: number status: string paidDate?: string | null createdAt: string } export const portalAPI = { getManagedLeaves: async (status?: string): Promise => { const q = new URLSearchParams() if (status && status !== 'all') q.append('status', status) const response = await api.get(`/hr/portal/managed-leaves?${q.toString()}`) return response.data.data || [] }, approveManagedLeave: async (id: string) => { const response = await api.post(`/hr/portal/managed-leaves/${id}/approve`) return response.data.data }, rejectManagedLeave: async (id: string, rejectedReason: string) => { const response = await api.post(`/hr/portal/managed-leaves/${id}/reject`, { rejectedReason }) return response.data.data }, getMe: async (): Promise => { const response = await api.get('/hr/portal/me') return response.data.data }, getLoans: async (): Promise => { const response = await api.get('/hr/portal/loans') return response.data.data || [] }, submitLoanRequest: async (data: { type: string; amount: number; installments?: number; reason?: string }): Promise => { const response = await api.post('/hr/portal/loans', data) return response.data.data }, getOvertimeRequests: async (): Promise => { const response = await api.get('/hr/portal/overtime-requests') return response.data.data || [] }, submitOvertimeRequest: async (data: { date: string hours: number reason: string }): Promise => { const response = await api.post('/hr/portal/overtime-requests', data) return response.data.data }, getManagedOvertimeRequests: async (): Promise => { const response = await api.get('/hr/portal/managed-overtime-requests') return response.data.data || [] }, approveManagedOvertimeRequest: async (attendanceId: string): Promise => { const response = await api.post(`/hr/portal/managed-overtime-requests/${attendanceId}/approve`) return response.data.data }, rejectManagedOvertimeRequest: async ( attendanceId: string, rejectedReason: string ): Promise => { const response = await api.post(`/hr/portal/managed-overtime-requests/${attendanceId}/reject`, { rejectedReason, }) return response.data.data }, getLeaveBalance: async (year?: number): Promise => { const params = year ? `?year=${year}` : '' const response = await api.get(`/hr/portal/leave-balance${params}`) return response.data.data || [] }, getLeaves: async (): Promise => { const response = await api.get('/hr/portal/leaves') return response.data.data || [] }, submitLeaveRequest: async (data: { leaveType: string; startDate: string; endDate: string; reason?: string }): Promise => { const response = await api.post('/hr/portal/leaves', data) return response.data.data }, getPurchaseRequests: async (): Promise => { const response = await api.get('/hr/portal/purchase-requests') return response.data.data || [] }, submitPurchaseRequest: async (data: { items: Array<{ description: string; quantity?: number; estimatedPrice?: number }>; reason?: string; priority?: string }): Promise => { const response = await api.post('/hr/portal/purchase-requests', data) return response.data.data }, getAttendance: async (month?: number, year?: number): Promise => { const params = new URLSearchParams() if (month) params.append('month', String(month)) if (year) params.append('year', String(year)) const query = params.toString() ? `?${params.toString()}` : '' const response = await api.get(`/hr/portal/attendance${query}`) return response.data.data || [] }, getSalaries: async (): Promise => { const response = await api.get('/hr/portal/salaries') return response.data.data || [] }, }