import ApiService from "./ApiService";

// Salary Settings interfaces
export interface SalarySetting {
  id: string;
  name: string;
  code?: string; // System-defined code for protected settings
  type: "earning" | "deduction";
  type_value: "percentage" | "fixed";
  value: string;
  is_taxable: number; // 0 or 1
  created_at: string;
  updated_at?: string;
}

export interface SalarySettingsFilters {
  search?: string;
  type?: "earning" | "deduction" | "all";
  column_name?: string;
  order?: 'ASC' | 'DESC';
  page?: number;
  limit?: number;
}

export interface CreateSalarySettingData {
  name: string;
  type: "earning" | "deduction";
  type_value: "percentage" | "fixed";
  value: string;
  is_taxable: number; // 0 or 1
}

export interface UpdateSalarySettingData
  extends Partial<CreateSalarySettingData> {
  id: string;
}

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

export interface SalarySettingResponse {
  success?: boolean;
  message?: string;
  data: SalarySetting;
}

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

// Create Salary Setting
export async function createSalarySetting(data: CreateSalarySettingData) {
  return ApiService.request<SalarySettingResponse>({
    url: "/salary-settings",
    method: "post",
    data,
  });
}

// Get Salary Settings with filters
export async function getSalarySettings(filters?: SalarySettingsFilters) {
  const params: any = {
    search: filters?.search || "",
    page: filters?.page || 1,
    limit: filters?.limit || 10,
  };

  // Only add type to params if it's defined and not 'all'
  if (filters?.type !== undefined && filters.type !== "all") {
    params.type = filters.type;
  }

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

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

  return ApiService.request<SalarySettingsListResponse>({
    url: "/salary-settings",
    method: "get",
    params,
  });
}

// Get Salary Setting by ID
export async function getSalarySettingById(id: string) {
  return ApiService.request<SalarySettingResponse>({
    url: `/salary-settings/${id}`,
    method: "get",
  });
}

// Update Salary Setting
export async function updateSalarySetting(data: UpdateSalarySettingData) {
  const { id, ...updateData } = data;
  return ApiService.request<SalarySettingResponse>({
    url: `/salary-settings/${id}`,
    method: "put",
    data: updateData,
  });
}

// Delete Salary Setting
export async function deleteSalarySetting(id: string) {
  return ApiService.request<DeleteSalarySettingResponse>({
    url: `/salary-settings/${id}`,
    method: "delete",
  });
}
