import api from "../lib/axios";
import { CurrentUser, AttendanceMethod, UserRole, EmploymentType, WorkMode, Department } from "../types/auth";
import { AxiosRequestConfig } from "axios";

export interface CreateEmployeeDto {
  name: string;
  email: string;
  password: string;
  role: UserRole;
  attendanceMethod: AttendanceMethod;
  biometricDeviceId?: string;
  employmentType?: EmploymentType;
  workMode?: WorkMode;
  department?: Department;
  hireDate?: string;
}

export interface UpdateEmployeeDto {
  name?: string;
  email?: string;
  role?: UserRole;
  attendanceMethod?: AttendanceMethod;
  biometricDeviceId?: string;
  employmentType?: EmploymentType;
  workMode?: WorkMode;
  department?: Department;
  hireDate?: string;
  isActive?: boolean;
}

export const employeeService = {
  getAll: async (params?: any, options?: AxiosRequestConfig): Promise<{ data: CurrentUser[]; total: number; page: number; lastPage: number }> => {
    const response = await api.get("/users", { ...options, params });
    return response.data;
  },

  getById: async (id: number, options?: AxiosRequestConfig): Promise<CurrentUser> => {
    const response = await api.get(`/users/${id}`, options);
    return response.data;
  },

  create: async (data: CreateEmployeeDto, options?: AxiosRequestConfig): Promise<CurrentUser> => {
    const response = await api.post("/users", data, options);
    return response.data;
  },

  update: async (id: number, data: UpdateEmployeeDto, options?: AxiosRequestConfig): Promise<CurrentUser> => {
    const response = await api.put(`/users/${id}`, data, options);
    return response.data;
  },

  delete: async (id: number, options?: AxiosRequestConfig): Promise<void> => {
    await api.delete(`/users/${id}`, options);
  },

  deleteBulk: async (ids: number[], options?: AxiosRequestConfig): Promise<void> => {
    await api.delete("/users", { ...options, data: { ids } });
  },
};
