import api from "../lib/axios";
import { LeaveRequest, LeaveBalance } from "../types/leaveRequests";
import { AxiosRequestConfig } from "axios";

export const leaveService = {
  getRequests: async (params: any, options?: AxiosRequestConfig): Promise<{ data: LeaveRequest[], total: number }> => {
    const response = await api.get("/leave/requests", { params, ...options });
    return response.data;
  },

  getAllRequests: async (params: any, options?: AxiosRequestConfig): Promise<{ data: LeaveRequest[], total: number }> => {
    const response = await api.get("/leave/all-requests", { params, ...options });
    return response.data;
  },

  getBalances: async (options?: AxiosRequestConfig): Promise<LeaveBalance[]> => {
    const response = await api.get("/leave/balances", options);
    return response.data;
  },

  approveRequest: async (id: number, options?: AxiosRequestConfig): Promise<LeaveRequest> => {
    const response = await api.put(`/leave/approve/${id}`, {}, options);
    return response.data;
  },

  rejectRequest: async (id: number, reason?: string, options?: AxiosRequestConfig): Promise<LeaveRequest> => {
    const response = await api.put(`/leave/reject/${id}`, { reason }, options);
    return response.data;
  },

  cancelRequest: async (id: number, options?: AxiosRequestConfig): Promise<LeaveRequest> => {
    const response = await api.put(`/leave/cancel/${id}`, {}, options);
    return response.data;
  },

  createRequest: async (data: any, options?: AxiosRequestConfig): Promise<LeaveRequest> => {
    const response = await api.post("/leave/request", data, options);
    return response.data;
  },

  assignInitial: async (userId: number, options?: AxiosRequestConfig): Promise<number> => {
    const response = await api.post(`/leave/assign-initial/${userId}`, {}, options);
    return response.data;
  },

  getUserRequestsByHR: async (userId: number, options?: AxiosRequestConfig): Promise<LeaveRequest[]> => {
    const response = await api.get(`/leave/user/${userId}`, options);
    return response.data;
  },

  updateBalance: async (userId: number, leaveType: string, balance: number, options?: AxiosRequestConfig): Promise<LeaveBalance> => {
    const response = await api.put(`/leave/balance/${userId}/${leaveType}`, { balance }, options);
    return response.data;
  },

  getBalanceByUser: async (userId: number, options?: AxiosRequestConfig): Promise<LeaveBalance[]> => {
    const response = await api.get(`/leave/balances/${userId}`, options);
    return response.data;
  },
};
