#!/usr/bin/env python
import pathlib
import re
import sys

import markdown
from playwright.sync_api import sync_playwright

VAULT = pathlib.Path("/data/users/julio/Notes")
PDF_DIR = VAULT / "02-Areas/English/assets/pdf"
IMG_DIR = VAULT / "02-Areas/English/assets/images"

CSS = """
@page { size: A4; margin: 22mm 20mm; }
* { box-sizing: border-box; }
body {
  font-family: Georgia, "Times New Roman", serif;
  font-size: 12.5pt;
  line-height: 1.55;
  color: #1a1a1a;
  background: #ffffff;
  margin: 0;
  padding: 40px 48px;
  max-width: 820px;
}
h1 {
  font-size: 21pt;
  margin: 0 0 18px 0;
  padding-bottom: 8px;
  border-bottom: 2px solid #1a1a1a;
}
h2 {
  font-size: 14pt;
  margin: 26px 0 8px 0;
  color: #0b3d63;
}
p { margin: 0 0 10px 0; }
"""


def strip_frontmatter(text: str) -> str:
    if text.startswith("---"):
        end = text.find("\n---", 3)
        if end != -1:
            text = text[end + 4 :]
    return text.lstrip("\n")


def build_html(md_text: str, title: str) -> str:
    body = markdown.markdown(md_text, extensions=["extra", "sane_lists"])
    return (
        "<!doctype html><html><head><meta charset='utf-8'>"
        f"<title>{title}</title><style>{CSS}</style></head>"
        f"<body>{body}</body></html>"
    )


def render(html: str, base: str) -> None:
    PDF_DIR.mkdir(parents=True, exist_ok=True)
    IMG_DIR.mkdir(parents=True, exist_ok=True)
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page(
            viewport={"width": 900, "height": 1400}, device_scale_factor=2
        )
        page.set_content(html, wait_until="load")
        page.pdf(
            path=str(PDF_DIR / f"{base}.pdf"),
            format="A4",
            print_background=True,
            margin={"top": "22mm", "bottom": "22mm", "left": "20mm", "right": "20mm"},
        )
        page.locator("body").screenshot(path=str(IMG_DIR / f"{base}.png"))
        browser.close()


def main() -> None:
    if len(sys.argv) < 2:
        sys.exit("uso: apunte_a_profe.py <ruta.md>")
    src = pathlib.Path(sys.argv[1])
    base = src.stem[:-3] if src.stem.endswith(".en") else src.stem
    text = strip_frontmatter(src.read_text(encoding="utf-8"))
    title = re.search(r"^#\s+(.+)$", text, re.M)
    html = build_html(text, title.group(1) if title else base)
    render(html, base)
    print(f"PDF -> {PDF_DIR / (base + '.pdf')}")
    print(f"PNG -> {IMG_DIR / (base + '.png')}")


if __name__ == "__main__":
    main()
