Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/* Einfacher & stabiler Label-Scanner
   Kein Worker, keine WASM, läuft in allen Browsern */

(function () {

  const btn = document.getElementById("ados-scan-run");
  const fileInput = document.getElementById("ados-scan-file");
  const statusEl = document.getElementById("ados-scan-status");
  const resultsEl = document.getElementById("ados-scan-results");
  const previewEl = document.getElementById("ados-scan-preview");

  if (!btn || !fileInput) return;

  function setStatus(t) {
    statusEl.textContent = t || "";
  }

  function preview(file) {
    const url = URL.createObjectURL(file);
    previewEl.innerHTML = `<img src="${url}" style="max-width:100%; border-radius:6px;">`;
  }

  // Tesseract v4 → stabil, kein WASM nötig
  function loadTesseract() {
    return new Promise((resolve, reject) => {
      if (window.Tesseract) return resolve();
      const s = document.createElement("script");
      s.src = "https://cdn.jsdelivr.net/npm/tesseract.js@4/dist/tesseract.min.js";
      s.onload = resolve;
      s.onerror = reject;
      document.head.appendChild(s);
    });
  }

  async function runOCR(file) {
    await loadTesseract();

    return Tesseract.recognize(file, "eng", {
      logger: m => { /* kein Fortschritt nötig */ }
    }).then(r => r.data.text || "");
  }

  // Sucht nach Destillerie & Alter
  function extractQuery(text) {
    text = text.replace(/\s+/g, " ");

    const dist = text.match(/\b([A-Z][a-z]{3,})\b/);
    const age = text.match(/\b([1-3]?\d)\s?(years?|yo|Jahre)\b/i);

    let parts = [];
    if (dist) parts.push(dist[1]);
    if (age) parts.push(age[1]);

    return parts.join(" ");
  }

  async function searchWiki(q) {
    await mw.loader.using("mediawiki.api");
    const api = new mw.Api();
    const r = await api.get({
      action: "query",
      list: "search",
      srsearch: q,
      formatversion: 2
    });
    return r.query.search || [];
  }

  function renderResults(list) {
    if (!list.length) {
      resultsEl.innerHTML = "<div style='opacity:0.6'>Keine Treffer gefunden</div>";
      return;
    }
    resultsEl.innerHTML = list.map(it =>
      `<div><a href="/wiki/${encodeURIComponent(it.title)}">${it.title}</a></div>`
    ).join("");
  }

  fileInput.addEventListener("change", () => {
    if (fileInput.files[0]) preview(fileInput.files[0]);
  });

  btn.addEventListener("click", async () => {
    if (!fileInput.files[0]) return alert("Bitte Bild wählen!");

    btn.disabled = true;
    setStatus("Erkenne Text …");

    try {
      const text = await runOCR(fileInput.files[0]);
      setStatus("Suche im Wiki …");

      const q = extractQuery(text);
      const hits = await searchWiki(q);

      renderResults(hits);
      setStatus("Fertig ✅");
    } catch (e) {
      console.error(e);
      setStatus("Fehler ❗");
    }

    btn.disabled = false;
  });

})();