/*!
 * SmartPOS Promo Loader v1.0.0
 * Lanzamiento Agente IA Sm@rt
 * Self-contained, zero deps. Inyectable / removible.
 */
(function () {
  'use strict';

  // Apagado remoto opcional desde la página
  if (window.SMARTPOS_PROMO_DISABLED) return;

  // Overrides utiles para pruebas / demos:
  //   ?promo=1   fuerza mostrar (ignora cooldown)
  //   ?promo=0   fuerza ocultar
  //   window.SMARTPOS_PROMO_FORCE = true  fuerza mostrar
  var qs = (location.search || '').toLowerCase();
  var forceShow = window.SMARTPOS_PROMO_FORCE === true || /[?&]promo=1\b/.test(qs);
  var forceHide = /[?&]promo=0\b/.test(qs);
  if (forceHide) return;

  // Cooldown configurable: tras cerrar la promo no se vuelve a mostrar por
  // COOLDOWN_MS. Asi el mismo usuario no la ve cada refresh, pero si la verá
  // de nuevo mas tarde el mismo dia o al dia siguiente.
  // Default: 30 minutos. Sobrescribible con window.SMARTPOS_PROMO_COOLDOWN_MS
  var COOLDOWN_MS = (typeof window.SMARTPOS_PROMO_COOLDOWN_MS === 'number')
    ? window.SMARTPOS_PROMO_COOLDOWN_MS
    : 30 * 60 * 1000;
  var FLAG = 'smartpos_promo_v1_dismissed_at';

  if (!forceShow) {
    try {
      var dismissedAt = parseInt(localStorage.getItem(FLAG) || '0', 10);
      if (dismissedAt && (Date.now() - dismissedAt) < COOLDOWN_MS) return;
    } catch (e) { /* localStorage podría estar bloqueado, igual mostramos */ }
  }

  // Solo en la pantalla de login (existe #login)
  function ready(fn) {
    if (document.readyState !== 'loading') fn();
    else document.addEventListener('DOMContentLoaded', fn);
  }

  var BASE = (function () {
    var s = document.currentScript;
    if (s && s.src) return s.src.replace(/\/[^\/]*$/, '/');
    return '/promo/';
  })();

  function loadScript(src) {
    return new Promise(function (resolve, reject) {
      var s = document.createElement('script');
      s.src = src;
      s.async = false; // preservar orden
      s.onload = resolve;
      s.onerror = function () { reject(new Error('Failed: ' + src)); };
      document.head.appendChild(s);
    });
  }

  function loadCSS(href) {
    return new Promise(function (resolve) {
      var l = document.createElement('link');
      l.rel = 'stylesheet';
      l.href = href;
      l.onload = resolve;
      l.onerror = resolve;
      document.head.appendChild(l);
    });
  }

  ready(function () {
    if (!document.getElementById('login')) return;

    // Carga libs en paralelo y módulos en orden
    Promise.all([
      loadScript(BASE + 'vendor/gsap.min.js'),
      loadScript(BASE + 'vendor/anime.min.js'),
      loadCSS(BASE + 'styles.css')
    ])
      .then(function () { return loadScript(BASE + 'three-stage.js'); })
      .then(function () { return loadScript(BASE + 'scenes/_util.js'); })
      .then(function () { return loadScript(BASE + 'scenes/_feature.js'); })
      .then(function () { return loadScript(BASE + 'scenes/scene-intro.js'); })
      .then(function () { return loadScript(BASE + 'scenes/scene-hacer.js'); })
      .then(function () { return loadScript(BASE + 'scenes/scene-reportar.js'); })
      .then(function () { return loadScript(BASE + 'scenes/scene-explicar.js'); })
      .then(function () { return loadScript(BASE + 'scenes/scene-cta.js'); })
      .then(function () { return loadScript(BASE + 'director.js'); })
      .then(function () { return loadScript(BASE + 'modal.js'); })
      .then(function () {
        var el = document.createElement('smartpos-promo-modal');
        el.setAttribute('data-base', BASE);
        document.body.appendChild(el);
        // Marcar visto al cerrar
        el.addEventListener('promo-dismiss', function () {
          try { localStorage.setItem(FLAG, String(Date.now())); } catch (e) {}
        });
      })
      .catch(function (err) {
        // Falla silenciosa: no rompemos el login
        if (window.console) console.warn('[SmartPOS Promo] no cargado:', err.message);
      });
  });
})();
