/* === Scripts communs presents sur toutes les pages des jeux === */
/* Inclure via un wrapper PHP qui sert ce fichier (voir js-head-common.php dans chaque jeu). */

// Network nav dropdown
document.addEventListener('DOMContentLoaded', function() {
  var btn = document.querySelector('.net-btn');
  if (!btn) return;
  var dd = btn.nextElementSibling;
  btn.addEventListener('click', function(e) {
    e.stopPropagation();
    if (dd.classList.contains('net-dd-open')) {
      dd.classList.remove('net-dd-open');
      dd.classList.add('net-dd-closed');
    } else {
      dd.classList.remove('net-dd-closed');
      dd.classList.add('net-dd-open');
    }
  });
  document.addEventListener('click', function(e) {
    if (!dd.contains(e.target) && e.target !== btn) {
      dd.classList.remove('net-dd-open');
      dd.classList.add('net-dd-closed');
    }
  });
  // Reinitialiser quand la souris quitte le nav (desktop hover)
  document.querySelector('.net-nav')?.addEventListener('mouseleave', function() {
    dd.classList.remove('net-dd-open', 'net-dd-closed');
  });
  document.querySelector('.net-nav')?.addEventListener('mouseenter', function() {
    dd.classList.remove('net-dd-closed');
  });
});

// Pending score : si un score etait en attente avant connexion, le reenvoyer
// (no-op pour les non-connectes : la requete echoue silencieusement et le localStorage est vide)
(function() {
  var raw = localStorage.getItem('pending_score');
  if (!raw) return;
  try {
    var data = JSON.parse(raw);
    if (data.game !== location.hostname) return;
    if (Date.now() - data.timestamp > 10 * 60 * 1000) { localStorage.removeItem('pending_score'); return; }
    var isGet = data.url && data.url.includes('?');
    fetch(data.url || 'api.php', {
      method: 'POST',
      headers: isGet ? { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } : { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' },
      body: JSON.stringify(data.payload)
    }).then(function(r) { return r.json(); }).then(function(res) {
      localStorage.removeItem('pending_score');
      if (res.success || res.ok) {
        var t = document.createElement('div');
        t.className = 'pending-score-toast';
        t.textContent = 'Score enregistre !';
        document.body.appendChild(t);
        setTimeout(function() { t.classList.add('toast-out'); }, 3600);
        setTimeout(function() { t.remove(); }, 4000);
      }
    }).catch(function() { localStorage.removeItem('pending_score'); });
  } catch (e) { localStorage.removeItem('pending_score'); }
})();

// Service Worker register
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').catch(function(e) { console.log('SW:', e); });
}
