#!/usr/bin/env python3
"""
Exportador de slides para PNG usando Playwright (Chromium headless).
Captura cada slide (div#slide-N) como PNG 1080x1080px.
"""

import os
import sys
from pathlib import Path
from playwright.sync_api import sync_playwright

SLIDES_HTML = Path(__file__).parent / "slides.html"
OUTPUT_DIR = Path(__file__).parent

NUM_SLIDES = 7


def exportar_slides():
    if not SLIDES_HTML.exists():
        print(f"[ERRO] Arquivo nao encontrado: {SLIDES_HTML}")
        sys.exit(1)

    file_url = f"file://{SLIDES_HTML.resolve()}"

    with sync_playwright() as p:
        browser = p.chromium.launch(
            args=[
                "--no-sandbox",
                "--disable-setuid-sandbox",
                "--disable-dev-shm-usage",
                "--disable-gpu",
            ]
        )

        # Pagina com viewport maior para garantir renderizacao correta
        context = browser.new_context(
            viewport={"width": 1080, "height": 1080},
            device_scale_factor=1,
        )
        page = context.new_page()

        print(f"Carregando: {file_url}")
        page.goto(file_url, wait_until="networkidle", timeout=30000)

        # Aguarda fonte do Google Fonts carregar
        page.wait_for_timeout(2000)

        for n in range(1, NUM_SLIDES + 1):
            slide_id = f"slide-{n}"
            output_file = OUTPUT_DIR / f"slide_{n:02d}.png"

            element = page.query_selector(f"#{slide_id}")
            if element is None:
                print(f"[AVISO] #{slide_id} nao encontrado, pulando.")
                continue

            # Scroll ate o elemento para garantir renderizacao
            element.scroll_into_view_if_needed()
            page.wait_for_timeout(200)

            element.screenshot(path=str(output_file))
            size = output_file.stat().st_size / 1024
            print(f"[OK] {output_file.name} ({size:.1f} KB)")

        context.close()
        browser.close()

    print("\nExportacao concluida!")
    pngs = sorted(OUTPUT_DIR.glob("slide_*.png"))
    print(f"Total de arquivos gerados: {len(pngs)}")
    for f in pngs:
        print(f"  - {f.name}")


if __name__ == "__main__":
    exportar_slides()
