import { apiRequest, apiUpload } from "@/services/apiClient";
import type { AdminClientDetail, ClientProfileData } from "@/types/adminClient";
import type { User } from "@/types";

export type UpdateAdminClientPayload = {
  name?: string;
  email?: string;
  phone?: string | null;
  personType?: "pf" | "pj" | null;
  profile?: ClientProfileData;
  isActive?: boolean;
  company?: {
    name?: string;
    document?: string | null;
    email?: string | null;
    phone?: string | null;
    isActive?: boolean;
  };
};

export const adminClientsService = {
  get(token: string, userId: number) {
    return apiRequest<AdminClientDetail>(`/admin/clients/${userId}`, { token });
  },

  update(token: string, userId: number, body: UpdateAdminClientPayload) {
    return apiRequest<AdminClientDetail>(`/admin/clients/${userId}`, {
      method: "PUT",
      token,
      body,
    });
  },

  uploadAvatar(token: string, userId: number, file: File) {
    const form = new FormData();
    form.append("avatar", file);
    return apiUpload<User>(`/admin/clients/${userId}/avatar`, form, token);
  },

  updatePassword(
    token: string,
    userId: number,
    body: { password: string; password_confirmation: string },
  ) {
    return apiRequest<null>(`/admin/clients/${userId}/password`, {
      method: "PUT",
      token,
      body,
    });
  },

  suspend(token: string, userId: number) {
    return apiRequest<AdminClientDetail>(`/admin/clients/${userId}/suspend`, {
      method: "POST",
      token,
    });
  },

  activate(token: string, userId: number) {
    return apiRequest<AdminClientDetail>(`/admin/clients/${userId}/activate`, {
      method: "POST",
      token,
    });
  },

  remove(token: string, userId: number) {
    return apiRequest<null>(`/admin/clients/${userId}`, {
      method: "DELETE",
      token,
    });
  },
};
