(function () {
  // --- Helper: Debug-Ausgabe auch sichtbar im DOM zeigen (optional) ---
  function showHint(msg) {
    try {
      var box = document.getElementById('fidelo-widget-debug');
      if (!box) return;
      box.style.display = 'block';
      box.innerHTML = String(msg)
        .replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
        .replace(/\n/g,'<br>');
    } catch(_) {}
  }

  try {
    // --- Werte aus Modul-Feldern (HubL) ---
    var base = "";           // z.B. https://proxy.fidelo.com/app/widget/1.0/joergloehr/js/widget.js
    var combinationKey = "";  // Pflicht
    var lang = "";                   // 'de' | 'en'
    var bookingParamName = "";
    var requireBooking = ;

    // --- Grundlegende Validierung & Logging ---
    console.group('[Fidelo Widget]');
    console.info('Basis-URL:', base || '(leer)');
    console.info('Combination Key gesetzt?', Boolean(combinationKey));
    console.info('Language:', lang || '(leer)');
    console.info('Booking Param Name:', bookingParamName);
    console.info('Require Booking:', requireBooking);

    var missing = [];
    if (!base) missing.push('basis_script_url');
    if (!combinationKey) missing.push('combination_key');
    if (!lang) missing.push('language');

    if (missing.length) {
      var msg = 'Fidelo: Fehlende Pflichtfelder im Modul: ' + missing.join(', ') +
                '\n→ Bitte im Modul ausfüllen oder Standardwerte im Design-Manager hinterlegen.';
      console.error(msg);
      showHint(msg);
      console.groupEnd();
      return;
    }

    // --- Booking aus Seiten-URL lesen ---
    var qs = new URLSearchParams(window.location.search);
    var bookingVal = qs.get(bookingParamName);
    console.info('Booking Value aus URL:', bookingVal || '(nicht gesetzt)');

    if (requireBooking && !bookingVal) {
      var msg2 = 'Fidelo: booking-Parameter ist erforderlich, wurde aber nicht in der URL gefunden.\n' +
                 '→ Seite mit ?' + bookingParamName + '=TESTTOKEN aufrufen oder require_booking im Modul deaktivieren.';
      console.warn(msg2);
      showHint(msg2);
      console.groupEnd();
      return;
    }

    // --- Script-URL konstruieren ---
    function appendParam(u, key, val) {
      var sep = (u.indexOf('?') > -1) ? '&' : '?';
      return u + sep + encodeURIComponent(key) + '=' + encodeURIComponent(val);
    }

    var src = base;
    src = appendParam(src, 'c', combinationKey);
    src = appendParam(src, 'l', lang);
    if (bookingVal) {
      src = appendParam(src, bookingParamName, bookingVal);
    }

    // Optional: Cache-Buster, falls CDN hart cached
    // src = appendParam(src, '_ts', Date.now());

    console.info('Finale Script-URL:', src);

    // --- Script injizieren ---
    var s = document.createElement('script');
    s.src = src;
    s.async = true;

    s.onload = function() {
      console.info('Fidelo-Script geladen.');
      console.groupEnd();
    };
    s.onerror = function(e) {
      var msg3 = 'Fidelo: Script konnte nicht geladen werden. Prüfe Netzwerk/Adblocker/CORS.\nURL: ' + src;
      console.error(msg3, e);
      showHint(msg3);
      console.groupEnd();
    };

    document.head.appendChild(s);

    // Optional: Attribut am Custom Element setzen (falls Fidelo es nutzt)
    if (bookingVal) {
      var el = document.querySelector('fidelo-widget');
      if (el) {
        el.setAttribute(bookingParamName, bookingVal);
        console.info('Attribut am <fidelo-widget> gesetzt:', bookingParamName, '=', bookingVal);
      }
    }

  } catch (e) {
    console.error('Fidelo-Embed Ausnahme:', e);
    showHint('Fidelo-Embed Ausnahme: ' + (e && e.message ? e.message : e));
    try { console.groupEnd(); } catch(_) {}
  }
})();
