import ApiService from "./ApiService";

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

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

export interface CreateClientData {
  name: string;
  phone_number: string;
  email: string;
  status?: boolean;
}

export interface UpdateClientData {
  id: string;
  name: string;
  phone_number: string;
  email: string;
  status?: boolean;
}

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

export interface ClientResponse {
  success: boolean;
  message?: string;
  data: Client;
}

// Create Client
export async function createClient(data: CreateClientData) {
  return ApiService.request<ClientResponse>({
    url: "/clients",
    method: "post",
    data,
  });
}

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

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

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

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

// Get Client by ID
export async function getClientById(id: string) {
  return ApiService.request<ClientResponse>({
    url: `/clients/${id}`,
    method: "get",
  });
}

// Update Client
export async function updateClient(data: UpdateClientData) {
  const { id, ...updateData } = data;
  return ApiService.request<ClientResponse>({
    url: `/clients/${id}`,
    method: "put",
    data: updateData,
  });
}

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

// Delete Client
export async function deleteClient(id: string) {
  return ApiService.request<DeleteClientResponse>({
    url: `/clients/${id}`,
    method: "delete",
  });
}

// Toggle Client Status
export async function toggleClientStatus(id: string) {
  return ApiService.request<ClientResponse>({
    url: `/clients/active-inactive/${id}`,
    method: "patch",
  });
}
