"""
run_local.py — CLI runner for local development and testing.

Usage:
    python run_local.py --brief fixtures/brief_prada2.json --output <campaign_slug>

Default output: clients/Proximus/emails templates/Loyalty/output/<campaign_slug>/

Produces:
    <output>/hero_FR.jpg
    <output>/hero_NL.jpg
    <output>/email_FR.html   (hero src = "hero_FR.jpg", relative — works in browser)
    <output>/email_NL.html
"""
import argparse
import json
import pathlib
import sys

sys.path.insert(0, str(pathlib.Path(__file__).parent))

from compose_hero import compose_hero
from fill_template import fill_template

TEMPLATE_DIR = (
    pathlib.Path(__file__).parents[2]
    / "emails templates" / "Loyalty"
)
DEFAULT_OUTPUT_BASE = TEMPLATE_DIR / "output"

TEMPLATES = {
    "fr": TEMPLATE_DIR / "template_FR.html",
    "nl": TEMPLATE_DIR / "template_NL.html",
}


def run(brief_path: str, output_dir: str) -> None:
    brief = json.loads(pathlib.Path(brief_path).read_text(encoding="utf-8"))
    out = pathlib.Path(output_dir).resolve()
    out.mkdir(parents=True, exist_ok=True)

    for lang in ("fr", "nl"):
        hero_filename = f"hero_{lang.upper()}.jpg"
        hero_path = str(out / hero_filename)

        print(f"[{lang.upper()}] Composing hero image...")
        compose_hero(brief, lang=lang, output_path=hero_path)
        print(f"[{lang.upper()}] Hero saved → {hero_path}")

        # Use just the filename so the src resolves relative to the HTML file
        brief[lang]["hero_image_src"] = hero_filename

        print(f"[{lang.upper()}] Filling HTML template...")
        template = TEMPLATES[lang].read_text(encoding="utf-8")
        filled = fill_template(template, brief, lang=lang)
        html_path = out / f"email_{lang.upper()}.html"
        html_path.write_text(filled, encoding="utf-8")
        print(f"[{lang.upper()}] Email saved → {html_path}")

    print("\nDone. Open output files in a browser to preview.")


def main() -> None:
    parser = argparse.ArgumentParser(description="Generate Proximus loyalty movie email")
    parser.add_argument("--brief", required=True, help="Path to brief JSON file")
    parser.add_argument(
        "--output",
        required=True,
        help=(
            "Output directory. If relative, resolved from cwd. "
            f"Tip: use a slug like 'prada2' to write into {DEFAULT_OUTPUT_BASE}/<slug>"
        ),
    )
    args = parser.parse_args()
    run(args.brief, args.output)


if __name__ == "__main__":
    main()
