import { api } from "@/src/lib/api/client";

export type MembershipInfo = {
  id: number;
  status: "invited" | "active" | "suspended";
  is_owner: boolean;
  role_ids: number[];
} | null;

export type TenantUser = {
  id: number;
  username: string;
  email: string;
  first_name: string;
  last_name: string;
  telephone?: string | null;
  departement?: string | null;
  is_active: boolean;
  membership: MembershipInfo;
};

export type CreateTenantUserPayload = {
  username: string;
  email: string;
  first_name?: string;
  last_name?: string;
  telephone?: string;
  departement?: string;
  password?: string;
  role_ids?: number[];
};

export type UpdateTenantUserPayload = Partial<{
  username: string;
  email: string;
  first_name: string;
  last_name: string;
  telephone: string;
  departement: string;
  password: string;
}>;

export async function listTenantUsers(params?: { country?: string }): Promise<TenantUser[]> {
  const sp = new URLSearchParams();
  if (params?.country) sp.set("country", params.country);
  const url = sp.toString() ? `/tenant/users/?${sp.toString()}` : "/tenant/users/";
  return api.request<TenantUser[]>(url, { method: "GET" });
}

export async function createTenantUser(payload: CreateTenantUserPayload): Promise<TenantUser> {
  return api.request<TenantUser>("/tenant/users/", {
    method: "POST",
    body: JSON.stringify(payload),
  });
}

export async function updateTenantUser(id: number, payload: UpdateTenantUserPayload): Promise<TenantUser> {
  return api.request<TenantUser>(`/tenant/users/${id}/`, {
    method: "PATCH",
    body: JSON.stringify(payload),
  });
}

export async function toggleTenantUserActive(id: number): Promise<TenantUser> {
  return api.request<TenantUser>(`/tenant/users/${id}/toggle-active/`, { method: "POST" });
}

export async function updateTenantMembership(
  userId: number,
  payload: Partial<{ role_ids: number[]; status: "invited" | "active" | "suspended" }>
): Promise<TenantUser> {
  return api.request<TenantUser>(`/tenant/users/${userId}/membership/`, {
    method: "PATCH",
    body: JSON.stringify(payload),
  });
}

export async function removeTenantUser(userId: number): Promise<void> {
  await api.request(`/tenant/users/${userId}/remove/`, { method: "DELETE" });
}
