
    const statusEl = document.getElementById("status");
    const logEl = document.getElementById("log");
    const downloadsEl = document.getElementById("downloads");
    const runBtn = document.getElementById("runBtn");

    let pyodide = null;
    async function initPyodide() {
      statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
      pyodide = await loadPyodide();
      statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";

      await pyodide.loadPackage("micropip");
      const micropip = pyodide.pyimport("micropip");
      await micropip.install("openpyxl");
      statusEl.textContent = "Prêt — openpyxl installé.";         //load micropip qui permet d'accéder a openpyxl qui sert a écrire dans les excels.
    }

    // load Pyodide script tag dynamically
    (async () => {
      const s = document.createElement("script");
      s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
      s.onload = async () => { await initPyodide(); };
      document.head.appendChild(s);
    })();

    function log(msg) {
      logEl.textContent += msg + "\n";
      logEl.scrollTop = logEl.scrollHeight;
    }

    function createDownloadLink(filename, bytes) {
      // bytes is Uint8Array or ArrayBuffer-like
      const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
      const url = URL.createObjectURL(blob);
      const a = document.createElement("a");
      a.href = url;
      a.download = filename;
      a.textContent = `Download ${filename}`;
      downloadsEl.appendChild(a);
    }

    runBtn.addEventListener("click", async () => {
      downloadsEl.innerHTML = "";
      logEl.textContent = "";
      if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }

      const templateFile = document.getElementById("template_excel").files[0];
      const txtFile = document.getElementById("txt_input").files[0];
      const typeDoc = document.getElementById("typedoc").value;
      const nom_releveur = document.getElementById("nom_releveur").value || "";
      const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";

      if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
      if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }

      statusEl.textContent = "Lecture des fichiers (navigateur)...";
      // read files on JS side
      const [tmplBuf, txtStr] = await Promise.all([
        templateFile.arrayBuffer(),
        txtFile.text()
      ]);

      // pass into pyodide globals:
      // set template bytes as a Uint8Array in globals so Python can get bytes via to_py()
      pyodide.globals.set("template_uint8", new Uint8Array(tmplBuf));
      pyodide.globals.set("txt_content", txtStr);
      pyodide.globals.set("typeDoc", typeDoc);
      pyodide.globals.set("nom_du_releveur", nom_releveur);
      pyodide.globals.set("hauteur_bosch", hauteur_bosch);

      statusEl.textContent = "Exécution du script Python (Pyodide)...";
      log("Lancement du traitement...");

      try {
         
        const response = await fetch('UDS - Copie.py');
        const python_core_code = await response.text();
        await pyodide.runPythonAsync(python_core_code);
        statusEl.textContent = "Terminé — fichiers générés.";
        log("Terminé.");
      } catch (err) {
        console.error(err);
        statusEl.textContent = "Erreur pendant l'exécution (voir log).";
        log("ERREUR: " + err);
      } finally {
        try {
          pyodide.globals.delete("template_uint8");
          pyodide.globals.delete("txt_content");
          pyodide.globals.delete("typeDoc");
          pyodide.globals.delete("nom_du_releveur");
          pyodide.globals.delete("hauteur_bosch");
        } catch(e) {}
      }
    });
