import ApiService from "./ApiService";

export interface TechnologyEmployee {
  id: number;
  technology_id: number;
  employee_id: number;
  employee: {
    id: number;
    first_name: string;
    last_name: string;
  };
}

export interface Technology {
  id: string;
  name: string;
  status: number;
  assignments: TechnologyEmployee[];
  created_at?: string;
  updated_at?: string;
}

export interface TechnologyFilters {
  search?: string;
  employee_id?: number;
  page?: number;
  limit?: number;
}

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

export interface TechnologyResponse {
  success: boolean;
  message?: string;
  data: Technology;
}

export interface CreateTechnologyData {
  name: string;
}

export interface UpdateTechnologyData {
  id: string;
  name: string;
  status?: number;
}

export interface AssignEmployeesData {
  technology_id: number;
  employee_ids: number[];
}

export async function getTechnologies(filters?: TechnologyFilters) {
  const params: any = {
    search: filters?.search || "",
    page: filters?.page || 1,
    limit: filters?.limit || 10,
  };

  if (filters?.employee_id !== undefined) {
    params.employee_id = filters.employee_id;
  }

  return ApiService.request<TechnologyListResponse>({
    url: "/employees/technologies",
    method: "get",
    params,
  });
}

export async function createTechnology(data: CreateTechnologyData) {
  return ApiService.request<TechnologyResponse>({
    url: "/employees/technologies",
    method: "post",
    data,
  });
}

export async function updateTechnology(data: UpdateTechnologyData) {
  const { id, ...updateData } = data;
  return ApiService.request<TechnologyResponse>({
    url: `/employees/technologies/${id}`,
    method: "put",
    data: updateData,
  });
}

export async function assignTechnologyEmployees(data: AssignEmployeesData) {
  return ApiService.request<TechnologyResponse>({
    url: "/employees/technologies/assign-employees",
    method: "post",
    data,
  });
}
