import { axiosClient } from "@/lib/axios";
import { ApiResponse } from "@/types/api.types";
import { PaginationMeta, PaginationParams, buildQueryParams } from "@/lib/pagination";
import {
  AcceptClientInvitationPayload,
  Client,
  InviteClientPayload,
  UpdateClientPayload,
} from "../types/client.type";

export const clientService = {
  inviteClient: async (
    payload: InviteClientPayload
  ): Promise<ApiResponse<{ message: string; email: string }>> => {
    const res = await axiosClient.post(`/clients/invite`, payload);
    return res.data;
  },

  acceptInvitation: async (
    payload: AcceptClientInvitationPayload
  ): Promise<ApiResponse<{ message: string }>> => {
    const res = await axiosClient.post(`/clients/accept-invitation`, payload);
    return res.data;
  },

  getClients: async (
    params: PaginationParams
  ): Promise<ApiResponse<Client[]> & { meta: PaginationMeta }> => {
    const res = await axiosClient.get(`/clients/get-all-clients?${buildQueryParams(params)}`);
    return res.data;
  },

  getClient: async (id: string): Promise<ApiResponse<Client>> => {
    const res = await axiosClient.get<ApiResponse<Client>>(`/clients/get-client/${id}`);
    return res.data;
  },

  updateClient: async (
    id: string,
    payload: UpdateClientPayload
  ): Promise<ApiResponse<Client>> => {
    const res = await axiosClient.patch(`/clients/update-client/${id}`, payload);
    return res.data;
  },

  deleteClient: async (id: string): Promise<ApiResponse<null>> => {
    const res = await axiosClient.delete(`/clients/delete-client/${id}`);
    return res.data;
  },
};
