import ApiService from "./ApiService";

// Company interfaces
export interface Company {
  id: string;
  company_name: string;
  first_name: string;
  last_name: string;
  email?: string;
  phone_number: string;
  address?: string;
  subscription_start_date: string;
  subscription_end_date?: string;
  subscription_duration: number;
  subscription_duration_type: string;
  subscription_amount: number;
  subscription_status?: string;
  address_id?: number;
  total_employees?: number;
  total_roles?: number;
  created_at?: string;
  updated_at?: string;
}

export interface CompanyFilters {
  search?: string;
  subscription_status?: string;
  page?: number;
  limit?: number;
  column_name?: string;
  order?: "ASC" | "DESC";
}

export interface CreateCompanyData {
  company_name: string;
  first_name: string;
  last_name: string;
  email?: string;
  phone_number: string;
  address?: string;
  subscription_start_date: string;
  subscription_duration: number;
  subscription_duration_type: string;
  subscription_amount: number;
  address_id?: number;
}

export interface UpdateCompanyData {
  id: string;
  company_name?: string;
  first_name?: string;
  last_name?: string;
  email?: string;
  phone_number?: string;
  subscription_start_date?: string;
  subscription_duration?: number;
  subscription_duration_type?: string;
  subscription_amount?: number;
}

export interface CompanyListResponse {
  success: boolean;
  message?: string;
  data: {
    data: Company[];
    total: number;
    page: number;
    limit: number;
  };
}

export interface CompanyResponse {
  success: boolean;
  message?: string;
  data: Company;
}

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

// Create Company
export async function createCompany(data: CreateCompanyData) {
  return ApiService.request<CompanyResponse>({
    url: "/companies",
    method: "post",
    data,
  });
}

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

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

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

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

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

// Get Company by ID
export async function getCompanyById(id: string) {
  return ApiService.request<CompanyResponse>({
    url: `/companies/${id}`,
    method: "get",
  });
}

// Update Company
export async function updateCompany(data: UpdateCompanyData) {
  const { id, ...updateData } = data;
  return ApiService.request<CompanyResponse>({
    url: `/companies/${id}`,
    method: "put",
    data: updateData,
  });
}

// Delete Company
export async function deleteCompany(id: string) {
  return ApiService.request<DeleteCompanyResponse>({
    url: `/companies/${id}`,
    method: "delete",
  });
}

// Toggle Company Status
export async function toggleCompanyStatus(id: string) {
  return ApiService.request<CompanyResponse>({
    url: `/companies/active-inactive/${id}`,
    method: "patch",
  });
}
