#!/usr/bin/env python3

import os
import sys
import socket
import urllib.request
import subprocess
import tempfile

print("Content-Type: application/pdf\n")

# 1. Récupération du code LaTeX depuis fetch.py
resultat = subprocess.run(
        ["python3", "fetch.py", "1"],
        capture_output=True,  
        text=True,            
        check=True
)
code_latex = resultat.stdout

# 2. Compilation LuaTeX en envoyant le PDF directement dans stdout
# On utilise la syntaxe standard pour lui dire d'écrire sur la sortie standard
compiler = subprocess.run(
        [
            "luatex", 
            "-interaction=nonstopmode", 
            "-output-format=pdf",       # Force la sortie en PDF
            "-jobname=texput",          # Nom par défaut interne
            "\\input /dev/stdin"
        ],
        input=code_latex.encode('utf-8'),
        capture_output=True,            # Capture stdout (le PDF) et stderr (le log de compilation)
        text=False
)

# 3. Extraction du flux binaire du PDF
# Quand luatex écrit tout sur stdout, il mélange le log texte et le PDF.
# Le PDF commence TOUJOURS par les octets b"%PDF"
donnees_brutes = compiler.stdout
#debut_pdf = donnees_brutes.find(b"%PDF")
debut_pdf = 0

if debut_pdf != -1:
    # On isole uniquement la partie binaire du PDF en ignorant le blabla de compilation
    pdf_data = donnees_brutes[debut_pdf:]
    sys.stdout.buffer.write(pdf_data)
else:
    # Si b"%PDF" n'est pas trouvé, c'est que la compilation a échoué (renvoi des logs en texte brut)
    print("Content-Type: text/plain; charset=utf-8\n")
    print("Erreur : LuaTeX n'a pas généré de flux PDF.")
    print(donnees_brutes.decode('utf-8', errors='ignore'))
