# apps/wp_invoices/integrations/mail_intake.py

from typing import Any, Dict, Optional
from pathlib import Path

from apps.wp_invoices.services.pipeline import process_invoice_bytes
from apps.wp_invoices.services.invoice_revision_pdf import create_invoice_revision_pdf
from apps.wp_invoices.integrations.tax_lookup import run_basic_tax_lookup

BASE_DIR = Path(__file__).resolve().parents[2]  # /var/www/html/flask_server

# Carpeta donde guardaremos los PDFs de revisión generados por correo
MAIL_REVISIONS_DIR = BASE_DIR / "data" / "wp_invoices_mail" / "revisions"
MAIL_REVISIONS_DIR.mkdir(parents=True, exist_ok=True)


def process_invoice_attachment_for_mail(
    data: bytes,
    filename: str,
    mimetype: str,  # <-- añade esto
) -> Dict[str, Any]:
    """
    Punto de entrada específico para integraciones por correo.

    - Ejecuta el pipeline de extracción de wp_invoices.
    - Crea el PDF de revisión usando create_invoice_revision_pdf.
    - Devuelve todo lo que la app de correo necesita.
    """

    # 1) Ejecutar el pipeline (extracción + checks mínimos)
    pipeline_result = process_invoice_bytes(
        file_bytes=data,
        filename=filename,
        content_type=mimetype,
        engine="mini",   # 👈 siempre mini para el mail-bot
    )

    extracted = pipeline_result["extracted"]
    checks = pipeline_result["checks"]
    #print("datos extracted")
    #print(extracted)
    tax_lookup_basic = run_basic_tax_lookup(extracted)
    #print(tax_lookup_basic)
    if tax_lookup_basic:
        checks["tax_lookup_basic"] = tax_lookup_basic

    # 2) Crear el PDF de revisión
    pdf_path = create_invoice_revision_pdf(
        extracted=extracted,
        output_dir=str(MAIL_REVISIONS_DIR),
        original_filename=filename,
        checks=checks,
    )

    return {
        "extracted": extracted,
        "checks": checks,
        "revision_pdf_path": pdf_path,
    }
