/* Eigene Sprachleiste: manuelles Umschalten + ULS-Integration + Fallback-Override */ mw.loader.using(['mediawiki.util', 'mediawiki.api', 'ext.uls.interface'], function () {

 // --- Nur im Lesemodus + Haupt-Namensraum ---
 var action = mw.config.get('wgAction');
 var ns = mw.config.get('wgNamespaceNumber');
 if (action !== 'view' || ns !== 0) return;
 // --- Sprachen ---
 var LANGS = [
   { code: 'de', label: 'Deutsch' },
   { code: 'en', label: 'English' },
   { code: 'fr', label: 'Français' }
 ];
 var ALLOWED = ['de', 'en', 'fr'];
 var FALLBACK = 'en';
 // Doppelte Einbindung vermeiden
 if (document.getElementById('custom-langbar')) return;
 var pageName = mw.config.get('wgPageName');
 var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, );
 function normalize(code) {
   if (!code) return FALLBACK;
   code = String(code).toLowerCase().split('-')[0];
   return ALLOWED.indexOf(code) > -1 ? code : FALLBACK;
 }
 // Ziel-URL mit Special:MyLanguage und uselang
 function targetUrl(code) {
   code = normalize(code);
   var title = 'Special:MyLanguage/' + baseTitle.replace(/_/g, ' ');
   var url = mw.util.getUrl(title);
   return url + (url.includes('?') ? '&' : '?') + 'uselang=' + code;
 }
 // --- Sprachleiste bauen ---
 var bar = document.createElement('div');
 bar.id = 'custom-langbar';
 var current = normalize(mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || FALLBACK);
 LANGS.forEach(function (lang) {
   var a = document.createElement('a');
   a.href = '#';
   a.textContent = lang.label;
   if (current === lang.code) a.className = 'active-lang';
   a.addEventListener('click', function (e) {
     e.preventDefault();
     switchLanguage(lang.code);
   });
   bar.appendChild(a);
 });
 var mount =
   document.querySelector('.minerva-header') ||
   document.querySelector('.vector-header') ||
   document.getElementById('content') ||
   document.body;
 if (mount && mount.parentNode) {
   mount.parentNode.insertBefore(bar, mount.nextSibling);
 } else {
   document.body.insertBefore(bar, document.body.firstChild);
 }
 // --- Sprachwechsel ---
 function switchLanguage(code) {
   code = normalize(code);
   // Versuch: Sprache direkt über ULS setzen (für Gäste persistent)
   if (mw.uls && typeof mw.uls.setLanguage === 'function') {
     mw.uls.setLanguage(code);
   }
   // Für eingeloggte Benutzer: Option speichern
   if (mw.config.get('wgUserName')) {
     new mw.Api().postWithToken('csrf', {
       action: 'options',
       change: 'language=' + code
     }).always(function () {
       location.href = targetUrl(code);
     });
   } else {
     // Für Gäste: Sprache auch im localStorage sichern
     try { localStorage.setItem('preferredLang', code); } catch (e) {}
     location.href = targetUrl(code);
   }
 }
 // --- Bei Seitenaufruf für Gäste gespeicherte Sprache anwenden ---
 if (!mw.config.get('wgUserName')) {
   try {
     var pref = normalize(localStorage.getItem('preferredLang'));
     var currentLang = normalize(mw.config.get('wgUserLanguage'));
     if (pref && pref !== currentLang && !/[?&]uselang=/.test(location.search)) {
       location.replace(targetUrl(pref));
     }
   } catch (e) {}
 }
 // --- Anonyme markieren ---
 if (!mw.config.get('wgUserName')) {
   document.documentElement.classList.add('bv-anon');
 }
 // --- Gäste nicht auf Diskussionsseiten lassen ---
 if (!mw.config.get('wgUserName')) {
   var nsNum = mw.config.get('wgNamespaceNumber');
   if (nsNum % 2 === 1) {
     var subject = mw.util.getUrl(mw.config.get('wgPageName').replace(/^Talk:/, ));
     window.location.href = subject;
   }
 }

});