# apps/wp_invoices_mail_app/processor.py
import os
import traceback
from typing import Any, Dict, List
from pathlib import Path
from apps.wp_invoices.integrations.mail_intake import process_invoice_attachment_for_mail

from typing import List, Dict, Any

from jinja2 import Environment, FileSystemLoader, select_autoescape
from .renderers import render_results_email_html

# Import “suave” de get_mail_theme, con fallback
try:
    from shared.branding.branding import get_mail_theme
except Exception:
    def get_mail_theme() -> dict:
        # Fallback seguro por si algo falla al importar branding
        return {
            "font_stack": "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
            "page_bg": "#020918",
            "card_bg": "#071429",
            "border_color": "#122647",
            "brand_color": "#0b3b73",
            "text_color": "#f5f7fb",
            "secondary_text": "#9ba4c4",
            "success_color": "#1fbf75",
            "error_color": "#f04444",
            "stat_bg": "#081937",
            "table_header_bg": "#0d2142",
            "tag_bg": "#132750",
            "tag_text": "#c3d1ff",
        }



def process_attachments_with_wp_invoices(attachments):
    """
    Procesa una lista de adjuntos usando la app wp_invoices.

    Devuelve una lista de dicts del tipo:
      - éxito:
        {
          "ok": True,
          "filename": "...",
          "revision_pdf_path": "...",
          "extracted": {...},   # si mail_intake lo incluye
          ...
        }
      - error:
        {
          "ok": False,
          "filename": "...",
          "error": "mensaje",
          "traceback": "stack...",
        }
    """
    results = []

    for att in attachments:
        # Normalizar la forma del adjunto: tupla (filename, data, mimetype) o "objeto"
        if isinstance(att, tuple) and len(att) == 3:
            filename, data, mimetype = att
        else:
            filename = getattr(att, "filename", "unnamed")
            data = getattr(att, "content", None)
            mimetype = getattr(att, "mimetype", "application/octet-stream")

        if data is None:
            err_msg = "Adjunto sin contenido (data=None)"
            print(f"🔴 {err_msg} para {filename}")
            results.append(
                {
                    "ok": False,
                    "filename": filename,
                    "error": err_msg,
                }
            )
            continue

        print(f"🟢 Procesando adjunto con wp_invoices: {filename}")

        try:
            # Esta función ya la estás usando en mail_intake.py
            pipeline_result = process_invoice_attachment_for_mail(
                data=data,
                filename=filename,
                mimetype=mimetype,
            )

            # pipeline_result puede traer:
            #  - revision_pdf_path
            #  - extracted
            #  - checks
            #  etc. → los mantenemos tal cual con **pipeline_result
            result = {
                "ok": True,
                "filename": filename,
                **(pipeline_result or {}),
            }
            results.append(result)

        except Exception as e:
            tb = traceback.format_exc()
            print(f"🔴 Error procesando adjunto {filename}: {e}")
            print(tb)
            results.append(
                {
                    "ok": False,
                    "filename": filename,
                    "error": str(e),
                    "traceback": tb,
                }
            )

    return results

from typing import List, Dict, Any

def build_email_body_for_results(results: List[Dict[str, Any]]) -> str:
    """
    Wrapper para mantener compatibilidad.
    Ahora delega al motor de plantillas centralizado en renderers.py,
    que devuelve el HTML completo del correo de resultados.
    """
    return render_results_email_html(results)


