import apiClient from './client'

// ─── Tipi ─────────────────────────────────────────────────────────────────────

export interface FascicoloResponse {
  id: string
  tenant_id: string
  titolo: string
  numero_pratica: string | null
  stato: 'aperto' | 'chiuso' | 'archiviato'
  categoria: string | null
  responsabile_id: string | null
  scadenza: string | null
  note: string | null
  created_by: string | null
  created_at: string
  updated_at: string
  message_count: number
}

export interface FascicoloCreate {
  titolo: string
  numero_pratica?: string | null
  stato?: 'aperto' | 'chiuso' | 'archiviato'
  categoria?: string | null
  responsabile_id?: string | null
  scadenza?: string | null
  note?: string | null
}

export interface FascicoloUpdate {
  titolo?: string
  numero_pratica?: string | null
  stato?: 'aperto' | 'chiuso' | 'archiviato'
  categoria?: string | null
  responsabile_id?: string | null
  scadenza?: string | null
  note?: string | null
}

export interface FascicoloMessageItem {
  id: string
  subject: string | null
  from_address: string | null
  to_addresses: string[] | null
  direction: 'inbound' | 'outbound'
  pec_type: string
  state: string
  mailbox_id: string
  received_at: string | null
  sent_at: string | null
  created_at: string
  added_at: string
}

export interface MessageFascicoloSummary {
  id: string
  titolo: string
  numero_pratica: string | null
  stato: 'aperto' | 'chiuso' | 'archiviato'
  categoria: string | null
}

// ─── Client API ───────────────────────────────────────────────────────────────

export const fascicoliApi = {
  /** Lista fascicoli con filtri opzionali */
  list: (params?: {
    stato?: string
    responsabile_id?: string
    search?: string
  }) =>
    apiClient
      .get<FascicoloResponse[]>('/fascicoli', { params })
      .then((r) => r.data),

  /** Dettaglio fascicolo */
  get: (id: string) =>
    apiClient.get<FascicoloResponse>(`/fascicoli/${id}`).then((r) => r.data),

  /** Crea fascicolo */
  create: (data: FascicoloCreate) =>
    apiClient.post<FascicoloResponse>('/fascicoli', data).then((r) => r.data),

  /** Modifica fascicolo */
  update: (id: string, data: FascicoloUpdate) =>
    apiClient
      .patch<FascicoloResponse>(`/fascicoli/${id}`, data)
      .then((r) => r.data),

  /** Elimina fascicolo */
  delete: (id: string) =>
    apiClient.delete(`/fascicoli/${id}`).then((r) => r.data),

  /** Messaggi del fascicolo */
  getMessages: (id: string) =>
    apiClient
      .get<FascicoloMessageItem[]>(`/fascicoli/${id}/messages`)
      .then((r) => r.data),

  /** Aggiungi messaggi al fascicolo */
  addMessages: (id: string, message_ids: string[]) =>
    apiClient
      .post<{ added: number }>(`/fascicoli/${id}/messages`, { message_ids })
      .then((r) => r.data),

  /** Rimuovi messaggi dal fascicolo */
  removeMessages: (id: string, message_ids: string[]) =>
    apiClient
      .delete<{ removed: number }>(`/fascicoli/${id}/messages`, {
        data: { message_ids },
      })
      .then((r) => r.data),

  /** Fascicoli a cui appartiene un messaggio */
  getMessageFascicoli: (messageId: string) =>
    apiClient
      .get<MessageFascicoloSummary[]>(`/messages/${messageId}/fascicoli`)
      .then((r) => r.data),
}
