import apiClient from './client'
import type {
  AssignedUserResponse,
  MailboxBriefResponse,
  VirtualBoxAssignmentResponse,
  VirtualBoxAssignRequest,
  VirtualBoxCreate,
  VirtualBoxListResponse,
  VirtualBoxMailboxAssignRequest,
  VirtualBoxResponse,
  VirtualBoxRuleCreate,
  VirtualBoxUpdate,
} from '@/types/api.types'


export const virtualBoxesApi = {
  /** Crea una nuova Virtual Box. */
  create: (data: VirtualBoxCreate) =>
    apiClient.post<VirtualBoxResponse>('/virtual-boxes', data).then((r) => r.data),

  /** Lista Virtual Box del tenant. */
  list: (params?: { page?: number; page_size?: number; active_only?: boolean }) =>
    apiClient
      .get<VirtualBoxListResponse>('/virtual-boxes', { params })
      .then((r) => r.data),

  /** Virtual Box assegnate all'utente corrente. */
  myVirtualBoxes: () =>
    apiClient.get<VirtualBoxResponse[]>('/virtual-boxes/my').then((r) => r.data),

  /**
   * Caselle PEC attive da cui l'utente può inviare tramite le sue Virtual Box.
   * Usato nella pagina di composizione per mostrare le caselle mittente disponibili.
   */
  getMyMailboxes: () =>
    apiClient
      .get<MailboxBriefResponse[]>('/virtual-boxes/my/mailboxes')
      .then((r) => r.data),

  /** Dettaglio Virtual Box. */
  get: (id: string) =>
    apiClient.get<VirtualBoxResponse>(`/virtual-boxes/${id}`).then((r) => r.data),

  /** Aggiorna Virtual Box (incluse caselle se fornito mailbox_ids). */
  update: (id: string, data: VirtualBoxUpdate) =>
    apiClient.patch<VirtualBoxResponse>(`/virtual-boxes/${id}`, data).then((r) => r.data),

  /** Elimina Virtual Box. */
  delete: (id: string) => apiClient.delete(`/virtual-boxes/${id}`),

  /** Sostituisce le regole di una Virtual Box. */
  replaceRules: (id: string, rules: VirtualBoxRuleCreate[]) =>
    apiClient
      .put<VirtualBoxResponse>(`/virtual-boxes/${id}/rules`, rules)
      .then((r) => r.data),

  // ─── Caselle reali ─────────────────────────────────────────────────────────

  /** Imposta le caselle PEC reali associate (sostituzione completa). */
  setMailboxes: (id: string, data: VirtualBoxMailboxAssignRequest) =>
    apiClient
      .put<VirtualBoxResponse>(`/virtual-boxes/${id}/mailboxes`, data)
      .then((r) => r.data),

  /** Lista caselle PEC reali associate. */
  listMailboxes: (id: string) =>
    apiClient
      .get<MailboxBriefResponse[]>(`/virtual-boxes/${id}/mailboxes`)
      .then((r) => r.data),

  // ─── Assegnazioni utenti ───────────────────────────────────────────────────

  /** Assegna utenti a una Virtual Box. */
  assignUsers: (id: string, data: VirtualBoxAssignRequest) =>
    apiClient
      .post<VirtualBoxAssignmentResponse[]>(`/virtual-boxes/${id}/assignments`, data)
      .then((r) => r.data),

  /** Rimuovi assegnazione utente. */
  unassignUser: (vboxId: string, userId: string) =>
    apiClient.delete(`/virtual-boxes/${vboxId}/assignments/${userId}`),

  /** Lista utenti assegnati. */
  listAssignedUsers: (id: string) =>
    apiClient
      .get<AssignedUserResponse[]>(`/virtual-boxes/${id}/assignments`)
      .then((r) => r.data),
}
