import json
import requests
from django.conf import settings

class ValidatorAPIError(Exception):
    pass

def validate_pdf_with_api(pdf_file):
    """
    pdf_file: UploadedFile (request.FILES['pdf'])
    Retorna dict (JSON) con el resultado de la API.
    """
    headers = {
        "Accept": "application/json",
    }
    if getattr(settings, "VALIDATOR_API_TOKEN", ""):
        headers["Authorization"] = f"Bearer {settings.VALIDATOR_API_TOKEN}"

    files = {
        # ajusta el nombre del campo según tu API: "file" / "document" / "pdf"
        "file": (pdf_file.name, pdf_file.file, "application/pdf"),
    }

    data = {
        # si tu API requiere campos extra (ej: tenant, country, mode), agrégalos aquí
        # "mode": "strict",
    }

    try:
        resp = requests.post(
            settings.VALIDATOR_API_URL,
            headers=headers,
            files=files,
            data=data,
            timeout=getattr(settings, "VALIDATOR_API_TIMEOUT", 30),
        )
    except requests.RequestException as e:
        raise ValidatorAPIError(f"No se pudo conectar a la API: {e}") from e

    # Manejo HTTP
    if resp.status_code >= 500:
        raise ValidatorAPIError("La API del validador respondió con error interno.")
    if resp.status_code >= 400:
        # intenta devolver mensaje útil
        try:
            payload = resp.json()
            msg = payload.get("message") or payload.get("error") or resp.text
        except Exception:
            msg = resp.text
        raise ValidatorAPIError(f"Error de validación (HTTP {resp.status_code}): {msg}")

    # Parse JSON
    try:
        return resp.json()
    except json.JSONDecodeError as e:
        raise ValidatorAPIError("La API respondió, pero no devolvió JSON válido.") from e
