// Servicios de trámites

import { apiClient } from "./client"
import type { Tramite, Version, Comentario, Adjunto, PaginatedResponse } from "./types"

export interface TramitesFilters {
  q?: string // Búsqueda por nombre
  estado?: string
  forma_juridica?: string
  organismo?: string
  jurisdiccion?: string
  page?: number
  per_page?: number
}

export const tramitesService = {
  /**
   * Obtener listado de trámites con filtros
   */
  async getAll(filters?: TramitesFilters): Promise<PaginatedResponse<Tramite>> {
    return apiClient.get<PaginatedResponse<Tramite>>("/api/tramites", filters)
  },

  /**
   * Obtener detalle de un trámite
   */
  async getById(id: string): Promise<Tramite> {
    return apiClient.get<Tramite>(`/api/tramites/${id}`)
  },

  /**
   * Crear un nuevo trámite
   */
  async create(data: Partial<Tramite>): Promise<Tramite> {
    return apiClient.post<Tramite>("/api/tramites", data)
  },

  /**
   * Actualizar un trámite existente
   */
  async update(id: string, data: Partial<Tramite>): Promise<Tramite> {
    return apiClient.put<Tramite>(`/api/tramites/${id}`, data)
  },

  /**
   * Eliminar un trámite
   */
  async delete(id: string): Promise<void> {
    return apiClient.delete<void>(`/api/tramites/${id}`)
  },

  /**
   * Obtener historial de versiones de un trámite
   */
  async getVersiones(id: string): Promise<Version[]> {
    return apiClient.get<Version[]>(`/api/tramites/${id}/versiones`)
  },

  /**
   * Agregar un comentario a un trámite
   */
  async addComentario(id: string, texto: string): Promise<Comentario> {
    return apiClient.post<Comentario>(`/api/tramites/${id}/comentarios`, {
      texto,
    })
  },

  /**
   * Subir un adjunto a un trámite
   */
  async uploadAdjunto(id: string, file: File, tipo: Adjunto["tipo"], titulo: string): Promise<Adjunto> {
    return apiClient.uploadFile<Adjunto>(`/api/tramites/${id}/adjuntos`, file, {
      tipo,
      titulo,
    })
  },
}
