import { axiosClient } from "@/lib/axios";
import { ApiResponse } from "@/types/api.types";
import { PaginationMeta, PaginationParams, buildQueryParams } from "@/lib/pagination";
import { Department, CreateDepartmentPayload, UpdateDepartmentPayload } from "../types/department.type";

export interface DepartmentListResponse {
  data: Department[];
  meta: PaginationMeta;
}

export const departmentService = {
  createDepartment: async (payload: CreateDepartmentPayload): Promise<ApiResponse<Department>> => {
    const res = await axiosClient.post<ApiResponse<Department>>("/departments/create-department", payload);
    return res.data;
  },

  getDepartments: async (params: PaginationParams): Promise<ApiResponse<Department[]> & { meta: PaginationMeta }> => {
    const res = await axiosClient.get(`/departments/get-all-departments?${buildQueryParams(params)}`);
    return res.data;
  },

  getDepartment: async (id: string): Promise<ApiResponse<Department>> => {
    const res = await axiosClient.get<ApiResponse<Department>>(`/departments/get-department/${id}`);
    return res.data;
  },

  updateDepartment: async (id: string, payload: UpdateDepartmentPayload): Promise<ApiResponse<Department>> => {
    const res = await axiosClient.put<ApiResponse<Department>>(`/departments/update-department/${id}`, payload);
    return res.data;
  },

  deleteDepartment: async (id: string): Promise<ApiResponse<null>> => {
    const res = await axiosClient.delete<ApiResponse<null>>(`/departments/delete-department/${id}`);
    return res.data;
  },
};
