import apiClient from './client'
import type {
  MailboxUserPermissionResponse,
  PermissionGrantRequest,
  PermissionResponse,
  UserMailboxPermissionResponse,
} from '@/types/api.types'

export const permissionsApi = {
  /**
   * Assegna o aggiorna i permessi di un utente su una casella.
   */
  grant: (mailboxId: string, userId: string, data: PermissionGrantRequest) =>
    apiClient
      .post<PermissionResponse>(
        `/permissions/mailboxes/${mailboxId}/users/${userId}`,
        data,
      )
      .then((r) => r.data),

  /**
   * Revoca i permessi di un utente su una casella.
   */
  revoke: (mailboxId: string, userId: string) =>
    apiClient.delete(`/permissions/mailboxes/${mailboxId}/users/${userId}`),

  /**
   * Lista utenti con accesso a una casella.
   */
  listMailboxUsers: (mailboxId: string) =>
    apiClient
      .get<MailboxUserPermissionResponse[]>(`/permissions/mailboxes/${mailboxId}/users`)
      .then((r) => r.data),

  /**
   * Lista caselle accessibili a un utente.
   */
  listUserMailboxes: (userId: string) =>
    apiClient
      .get<UserMailboxPermissionResponse[]>(`/permissions/users/${userId}/mailboxes`)
      .then((r) => r.data),

  /**
   * Caselle accessibili all'utente corrente.
   */
  myMailboxes: () =>
    apiClient
      .get<UserMailboxPermissionResponse[]>('/permissions/my/mailboxes')
      .then((r) => r.data),
}
