from __future__ import annotations

"""Brevo Transactional Email & ERP System Log Alert Service."""

import logging
import os
import traceback
from datetime import datetime
from typing import Any

logger = logging.getLogger(__name__)

BREVO_API_KEY = os.getenv(
    "BREVO_API_KEY",
    "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",
)
BREVO_SENDER_EMAIL = os.getenv("BREVO_SENDER_EMAIL", "admin@dinhsonconstruction.com")
BREVO_SENDER_NAME = os.getenv("BREVO_SENDER_NAME", "DSCons Enterprise")
ALERT_RECIPIENT_EMAIL = os.getenv(
    "ALERT_RECIPIENT_EMAIL", "admin@dinhsonconstruction.com"
)


from app.modules.core.infrastructure.adapters.brevo_adapter import (
    BrevoEmailAdapter,
)

_DEFAULT_BREVO_ADAPTER = BrevoEmailAdapter()


class BrevoEmailService:
    """Application Service for Transactional & System Alerts."""

    @classmethod
    async def send_email(
        cls,
        recipient_email: str,
        subject: str,
        html_content: str,
        recipient_name: str = "DSCons User",
        sender_email: str | None = None,
        sender_name: str | None = None,
        attachments: list[dict[str, str]] | None = None,
    ) -> dict[str, Any]:
        """Gửi email thông qua Brevo Secondary Adapter."""
        return await _DEFAULT_BREVO_ADAPTER.send_email(
            recipient_email=recipient_email,
            subject=subject,
            html_content=html_content,
            recipient_name=recipient_name,
            sender_email=sender_email,
            sender_name=sender_name,
            attachments=attachments,
        )

    @classmethod
    async def send_system_log_alert(
        cls,
        error_title: str,
        exception: Exception | None = None,
        module_name: str = "Core ERP",
        extra_context: dict[str, Any] | None = None,
    ) -> bool:
        """Gửi email thông báo sự cố/log lỗi nghiêm trọng của ERP đến Quản trị viên."""
        time_str = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
        stack_trace = traceback.format_exc() if exception else "N/A"

        context_html = ""
        if extra_context:
            context_rows = "".join(
                f"<tr><td style='padding: 6px 12px; border-bottom: 1px solid #334155; color: #94a3b8;'><strong>{k}:</strong></td>"
                f"<td style='padding: 6px 12px; border-bottom: 1px solid #334155; color: #f8fafc;'>{v}</td></tr>"
                for k, v in extra_context.items()
            )
            context_html = f"""
            <table style='width: 100%; border-collapse: collapse; margin-top: 12px; background: #1e293b; border-radius: 6px; font-size: 13px;'>
                {context_rows}
            </table>
            """

        html_body = f"""
        <div style="background-color: #0f172a; color: #f8fafc; padding: 24px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; border-radius: 8px; max-width: 680px; margin: 0 auto;">
            <div style="display: flex; align-items: center; border-bottom: 1px solid #334155; padding-bottom: 16px; margin-bottom: 16px;">
                <h2 style="color: #ef4444; margin: 0; font-size: 20px;">⚠️ [DSCons ERP Alert] {error_title}</h2>
            </div>
            <p style="margin: 4px 0; color: #cbd5e1;"><strong>Thời gian ghi nhận:</strong> {time_str}</p>
            <p style="margin: 4px 0; color: #cbd5e1;"><strong>Phân hệ phát sinh:</strong> <span style="background: #334155; padding: 2px 8px; border-radius: 4px; color: #38bdf8;">{module_name}</span></p>
            
            {context_html}

            <div style="background-color: #1e293b; padding: 16px; border-radius: 6px; border-left: 4px solid #ef4444; margin-top: 16px;">
                <h4 style="margin: 0 0 8px 0; color: #cbd5e1; font-size: 14px;">Chi tiết Lỗi (Stack Trace):</h4>
                <pre style="color: #fca5a5; font-size: 12px; overflow-x: auto; white-space: pre-wrap; font-family: Consolas, monospace; margin: 0;">{stack_trace}</pre>
            </div>

            <hr style="border: none; border-top: 1px solid #334155; margin: 24px 0 16px 0;" />
            <p style="font-size: 12px; color: #64748b; margin: 0;">
                Hệ Thống Giám Sát & Báo Cáo Sự Cố Tự Động - Công Ty TNHH Xây Dựng Định Sơn.
            </p>
        </div>
        """

        subject = f"🚨 [ERP ALERT] {error_title} ({time_str})"
        res = await cls.send_email(
            recipient_email=ALERT_RECIPIENT_EMAIL,
            subject=subject,
            html_content=html_body,
            recipient_name="DSCons Admin",
            sender_name="DSCons System Monitor",
        )
        return res.get("success", False)
