#!/usr/bin/env python3
"""Generate PDFs from HTML files for a given Science week.

Usage:
    python3 generate_week.py Week08        # generates PDFs in Week08/
    python3 generate_week.py Week08 W08_Monday_Liquids_Intro.html  # single file

Requires: weasyprint (in ~/.venvs/math-curve)
"""

import glob
import os
import sys
import subprocess

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))

def generate_html_to_pdf(html_path, output_dir):
    """Convert a single HTML file to PDF using WeasyPrint."""
    base_name = os.path.splitext(os.path.basename(html_path))[0]
    pdf_path = os.path.join(output_dir, base_name + ".pdf")

    try:
        from weasyprint import HTML
        HTML(filename=html_path).write_pdf(pdf_path)

        # Verify page count
        result = subprocess.run(
            ["pdfinfo", pdf_path],
            capture_output=True, text=True
        )
        for line in result.stdout.split("\n"):
            if "Pages" in line:
                pages = line.strip().split(":")[1].strip()
                if pages == "3":
                    print(f"  ✓ {base_name}.pdf ({pages} pages)")
                else:
                    print(f"  ✗ {base_name}.pdf ({pages} pages — expected 3)")
                break
        else:
            print(f"  ? {base_name}.pdf (page count unknown)")

        return pdf_path
    except Exception as e:
        print(f"  ✗ {base_name}: {e}")
        return None

def generate_week(week_dir):
    """Generate all PDFs for a week directory."""
    abs_week_dir = os.path.join(SCRIPT_DIR, week_dir)

    if not os.path.isdir(abs_week_dir):
        print(f"Error: {week_dir} not found")
        sys.exit(1)

    html_files = sorted(glob.glob(os.path.join(abs_week_dir, "W*.html")))

    if not html_files:
        print(f"No HTML files found in {week_dir}/")
        sys.exit(1)

    print(f"Generating PDFs for {week_dir}/")
    print(f"Found {len(html_files)} HTML file(s)")

    success = 0
    failed = 0
    for html_path in html_files:
        result = generate_html_to_pdf(html_path, abs_week_dir)
        if result:
            success += 1
        else:
            failed += 1

    print(f"\nDone: {success} success, {failed} failed")
    return failed == 0

def generate_weeks(week_dirs):
    """Generate PDFs for multiple week directories."""
    total_failed = 0
    for week_dir in week_dirs:
        if not generate_week(week_dir):
            total_failed += 1
    return total_failed == 0

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: generate_week.py Week08 [Week09 ...]")
        sys.exit(1)

    success = generate_weeks(sys.argv[1:])
    sys.exit(0 if success else 1)