import { apiClient } from './client';
import type { OpinionCumplimiento } from '@horux/shared';

export async function getOpiniones(contribuyenteId?: string): Promise<OpinionCumplimiento[]> {
  const params = contribuyenteId ? `?contribuyenteId=${encodeURIComponent(contribuyenteId)}` : '';
  const { data } = await apiClient.get(`/documentos/opiniones${params}`);
  return data;
}

export async function descargarOpinionPdf(id: number): Promise<Blob> {
  const { data } = await apiClient.get(`/documentos/opiniones/${id}/pdf`, {
    responseType: 'blob',
  });
  return data;
}

export async function consultarOpinion(contribuyenteId?: string): Promise<OpinionCumplimiento> {
  const params = contribuyenteId ? `?contribuyenteId=${encodeURIComponent(contribuyenteId)}` : '';
  const { data } = await apiClient.post(`/documentos/opiniones/consultar${params}`);
  return data;
}

export async function consultarConstancia(contribuyenteId?: string): Promise<any> {
  const params = contribuyenteId ? `?contribuyenteId=${encodeURIComponent(contribuyenteId)}` : '';
  const { data } = await apiClient.post(`/documentos/constancia/consultar${params}`);
  return data;
}

// ──────────────────────────────────────────────────────────────────
// Documentos Extras — PDFs libres (acuses, contratos, poderes, etc.)
// ──────────────────────────────────────────────────────────────────

export interface DocumentoExtra {
  id: number;
  contribuyenteId: string | null;
  nombre: string;
  descripcion: string | null;
  categoria: string | null;
  pdfFilename: string;
  subidoPor: string | null;
  createdAt: string;
}

export interface CreateExtraInput {
  nombre: string;
  descripcion?: string;
  categoria?: string;
  pdfBase64: string;
  pdfFilename: string;
}

export async function listarExtras(
  contribuyenteId?: string | null,
  categoria?: string | null,
): Promise<DocumentoExtra[]> {
  const params = new URLSearchParams();
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (categoria) params.set('categoria', categoria);
  const { data } = await apiClient.get(`/documentos/extras?${params}`);
  return data;
}

export async function listarCategoriasExtras(
  contribuyenteId?: string | null,
): Promise<string[]> {
  const params = new URLSearchParams();
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  const { data } = await apiClient.get(`/documentos/extras/categorias?${params}`);
  return data;
}

export async function crearExtra(
  input: CreateExtraInput,
  contribuyenteId?: string | null,
): Promise<DocumentoExtra> {
  const body = contribuyenteId ? { ...input, contribuyenteId } : input;
  const { data } = await apiClient.post('/documentos/extras', body);
  return data;
}

export async function descargarExtraPdf(id: number): Promise<Blob> {
  const { data } = await apiClient.get(`/documentos/extras/${id}/pdf`, {
    responseType: 'blob',
  });
  return data;
}

export async function eliminarExtra(id: number): Promise<void> {
  await apiClient.delete(`/documentos/extras/${id}`);
}
