/**
 * i18n.js — StockMaster Pro — v2.1.0
 * Fixes :
 *  - SM_LANG PHP a priorité absolue sur localStorage
 *  - Changement de langue → rechargement page (seule façon fiable)
 *  - Dropdown positionné intelligemment (évite débordement)
 */
(function(){

  const SUPPORTED = ['fr','en','de','es','it','nl','pt','pl','ru','tr','ar','ja','ko','zh','hi','id','uk'];
  const RTL_LANGS = ['ar'];

  const FLAGS = {
    fr:'🇫🇷', en:'🇬🇧', de:'🇩🇪', es:'🇪🇸', it:'🇮🇹',
    nl:'🇳🇱', pt:'🇵🇹', pl:'🇵🇱', ru:'🇷🇺', tr:'🇹🇷',
    ar:'🇸🇦', ja:'🇯🇵', ko:'🇰🇷', zh:'🇨🇳', hi:'🇮🇳',
    id:'🇮🇩', uk:'🇺🇦',
  };

  const NAMES = {
    fr:'Français',    en:'English',          de:'Deutsch',
    es:'Español',     it:'Italiano',         nl:'Nederlands',
    pt:'Português',   pl:'Polski',           ru:'Русский',
    tr:'Türkçe',      ar:'العربية',          ja:'日本語',
    ko:'한국어',       zh:'中文',             hi:'हिन्दी',
    id:'Bahasa Indonesia', uk:'Українська',
  };

  // ── Langue active : PHP (cookie/user) a la priorité absolue ───
  // window.SM_LANG est injecté par PHP AVANT ce script
  // On ne consulte localStorage que si PHP ne nous a pas donné de langue
  function detectLang(){
    // 1. Variable PHP injectée (index.php lit cookie → user → 'fr')
    //    Elle est définie AVANT ce script dans layout.php
    if(window._SM_LANG_PHP && SUPPORTED.includes(window._SM_LANG_PHP)){
      return window._SM_LANG_PHP;
    }
    // 2. Fallback localStorage (ne devrait pas arriver normalement)
    const ls = localStorage.getItem('sm_lang');
    if(ls && SUPPORTED.includes(ls)) return ls;
    return 'fr';
  }

  window.SM_LANG = detectLang();
  window.SM_I18N = {};

  // ── Traduction ─────────────────────────────────────────────────
  window.t = function(key, fallback){
    if(Object.prototype.hasOwnProperty.call(window.SM_I18N, key)){
      return window.SM_I18N[key];
    }
    return (fallback !== undefined) ? fallback : key;
  };

  // ── Application DOM (éléments statiques data-i18n) ─────────────
  window.applyI18n = function(root){
    root = root || document;
    root.querySelectorAll('[data-i18n]').forEach(function(el){
      var k  = el.getAttribute('data-i18n');
      var fb = el.getAttribute('data-i18n-fallback') || el.textContent || '';
      if(!k) return;
      el.textContent = window.t(k, fb);
    });
    root.querySelectorAll('[data-i18n-placeholder]').forEach(function(el){
      var k  = el.getAttribute('data-i18n-placeholder');
      el.setAttribute('placeholder', window.t(k, el.getAttribute('placeholder') || ''));
    });
    root.querySelectorAll('[data-i18n-title]').forEach(function(el){
      var k  = el.getAttribute('data-i18n-title');
      el.setAttribute('title', window.t(k, el.getAttribute('title') || ''));
    });
    document.documentElement.dir = RTL_LANGS.includes(window.SM_LANG) ? 'rtl' : 'ltr';
  };

  // ── Changement de langue ───────────────────────────────────────
  // Stratégie : cookie synchrone immédiat → reload → PHP lit le cookie
  window.setLang = function(lang){
    if(!SUPPORTED.includes(lang)) return Promise.reject('Lang not supported: ' + lang);
    if(lang === window.SM_LANG) return Promise.resolve();

    // Feedback immédiat sur le flag
    var flag = document.getElementById('langFlag');
    if(flag) flag.textContent = FLAGS[lang] || '🌐';

    // 1. Cookie SYNCHRONE — doit être écrit AVANT location.reload()
    //    PHP (index.php) lit $_COOKIE['sm_lang'] pour définir $lang
    var expires = new Date(Date.now() + 365*24*3600*1000).toUTCString();
    document.cookie = 'sm_lang=' + encodeURIComponent(lang)
      + ';path=/;expires=' + expires + ';SameSite=Lax';

    // 2. POST best-effort en arrière-plan (sauvegarde sur le compte user)
    var csrf = window.CSRF_TOKEN || '';
    fetch('api/lang.php', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': csrf },
      body: JSON.stringify({ lang: lang })
    }).catch(function(){});

    // 3. Rechargement après 80ms — laisse le temps au cookie d'être écrit
    //    et au fetch de partir (non bloquant)
    return new Promise(function(resolve){
      setTimeout(function(){ location.reload(); resolve(); }, 80);
    });
  };

  // ── Chargement du JSON de traduction au boot ───────────────────
  // Utilisé uniquement pour window.t() sur les éléments statiques
  // et pour les pages qui utilisent t() dans leurs render()
  window._i18nReady = fetch('api/lang.php?lang=' + encodeURIComponent(window.SM_LANG))
    .then(function(r){ return r.json(); })
    .then(function(data){
      window.SM_I18N = data;
      window.applyI18n(document);
      var flag = document.getElementById('langFlag');
      if(flag) flag.textContent = FLAGS[window.SM_LANG] || '🌐';
    })
    .catch(function(){ window.applyI18n(document); });

  // ── Exposer helpers ────────────────────────────────────────────
  window.I18N = { SUPPORTED: SUPPORTED, FLAGS: FLAGS, NAMES: NAMES };

})();
