import ApiService from "./ApiService";

// Department interfaces
export interface Department {
  id: string;
  name: string;
  status: boolean;
  created_at?: string;
  updated_at?: string;
}

export interface DepartmentFilters {
  search?: string;
  status?: number;
  column_name?: string;
  order?: 'ASC' | 'DESC';
  page?: number;
  limit?: number;
}

export interface CreateDepartmentData {
  name: string;
  status?: boolean;
}

export interface UpdateDepartmentData {
  id: string;
  name: string;
  status?: boolean;
}

export interface DepartmentListResponse {
  success: boolean;
  message?: string;
  data: {
    data: Department[];
    count: number;
  };
}

export interface DepartmentResponse {
  success: boolean;
  message?: string;
  data: Department;
}

// Create Department
export async function createDepartment(data: CreateDepartmentData) {
  return ApiService.request<DepartmentResponse>({
    url: "/departments",
    method: "post",
    data,
  });
}

// Get Departments with filters
export async function getDepartments(filters?: DepartmentFilters) {
  const params: any = {
    search: filters?.search || "",
    page: filters?.page || 1,
    limit: filters?.limit || 10,
  };

  // Only add status to params if it's defined (1 or 0)
  if (filters?.status !== undefined) {
    params.status = filters.status;
  }

  if (filters?.column_name) {
    params.column_name = filters.column_name;
  }

  if (filters?.order) {
    params.order = filters.order;
  }

  return ApiService.request<DepartmentListResponse>({
    url: "/departments",
    method: "get",
    params,
  });
}

// Get Department by ID
export async function getDepartmentById(id: string) {
  return ApiService.request<DepartmentResponse>({
    url: `/departments/${id}`,
    method: "get",
  });
}

// Update Department
export async function updateDepartment(data: UpdateDepartmentData) {
  const { id, ...updateData } = data;
  return ApiService.request<DepartmentResponse>({
    url: `/departments/${id}`,
    method: "put",
    data: updateData,
  });
}

export interface DeleteDepartmentResponse {
  success: boolean;
  message?: string;
}

// Delete Department
export async function deleteDepartment(id: string) {
  return ApiService.request<DeleteDepartmentResponse>({
    url: `/departments/${id}`,
    method: "delete",
  });
}

// Toggle Department Status
export async function toggleDepartmentStatus(id: string) {
  return ApiService.request<DepartmentResponse>({
    url: `/departments/active-inactive/${id}`,
    method: "patch",
  });
}
