"""Report building: convert report data to HTML using Jinja2 templates."""

from __future__ import annotations

import logging
from datetime import date
from pathlib import Path

from jinja2 import Environment, FileSystemLoader

from src.models.data_models import DailyReport

logger = logging.getLogger("seo_optimizer")

TEMPLATES_DIR = Path(__file__).parent / "templates"


def _get_jinja_env() -> Environment:
    return Environment(
        loader=FileSystemLoader(str(TEMPLATES_DIR)),
        autoescape=True,
    )


def build_daily_report_html(report: DailyReport) -> str:
    """Render daily report as HTML string.

    Args:
        report: DailyReport with all site data.

    Returns:
        Rendered HTML string.
    """
    env = _get_jinja_env()
    template = env.get_template("daily_report.html")
    html = template.render(report=report)
    logger.info("Daily report HTML generated (%d bytes)", len(html))
    return html


def build_alert_html(
    site_alerts: dict[str, list[str]],
    alert_date: date | None = None,
) -> str:
    """Render alert email as HTML string.

    Args:
        site_alerts: Dict of site_name -> list of alert messages.
        alert_date: Date for the alert header.

    Returns:
        Rendered HTML string.
    """
    if alert_date is None:
        alert_date = date.today()

    env = _get_jinja_env()
    template = env.get_template("alert.html")
    html = template.render(site_alerts=site_alerts, alert_date=alert_date)
    logger.info("Alert HTML generated (%d bytes)", len(html))
    return html
