"""Build the illustration and PDFs. Requires a TeX distribution on PATH.
Copyright 2026 Hatim Naqos. LPPL 1.3c or later.
Usage: python build.py [--engine pdflatex|xelatex|lualatex]
"""
import argparse
from pathlib import Path
import shutil
import subprocess
import tempfile

root = Path(__file__).resolve().parent
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--engine', choices=['pdflatex', 'xelatex', 'lualatex'], default='xelatex')
args = parser.parse_args()

def compile_source(engine, source, output, passes=3):
    if shutil.which(engine) is None:
        raise SystemExit(f'Required compiler not on PATH: {engine}')
    for _ in range(passes):
        result = subprocess.run(
            [engine, '-interaction=nonstopmode', '-halt-on-error',
             f'-output-directory={output}', source], cwd=root,
            stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        if result.returncode:
            print(result.stdout.decode('utf-8', errors='replace'))
            raise SystemExit(f'Compilation failed: {source}')

with tempfile.TemporaryDirectory(prefix='juniamaroc-beamer-build-') as temp:
    scratch = Path(temp)
    compile_source('pdflatex', 'juniamaroc-beamer-figure.tex', scratch, passes=1)
    shutil.copy2(scratch / 'juniamaroc-beamer-figure.pdf', root / 'assets')
    for stem in ['juniamaroc-beamer-doc', 'juniamaroc-beamer-demo', 'juniamaroc-beamer-starter']:
        compile_source(args.engine, stem + '.tex', scratch)
        shutil.copy2(scratch / (stem + '.pdf'), root / (stem + '.pdf'))
        print('Built ' + stem + '.pdf')
