/* =============================================================================
 * Lokalizacja w strukturze : /assets/js/global.js
 * Nazwa pliku              : global.js
 * Funkcja                  : Globalny skrypt strony. Sticky header, menu
 *                            mobilne (hamburger + aria-expanded), delikatne
 *                            animacje reveal przy przewijaniu, bardzo subtelny
 *                            parallax (rAF, z poszanowaniem reduced-motion),
 *                            obsługa banera cookies (zapis zgody w cookie).
 * Wygenerowana wersja      : 1.0.0
 * Historia zmian           :
 *   1.0.0  (2026-05-25)  Pierwsza wersja: header, menu, reveal, parallax, cookie.
 * Projekt                  : Mademoiselle Professional (redesign 2026)
 * Software                 : polooma.com
 * ========================================================================== */
(function () {
  'use strict';

  // Sticky header
  var header = document.getElementById('siteHeader');
  if (header) {
    addEventListener('scroll', function () {
      header.classList.toggle('scrolled', scrollY > 40);
    }, { passive: true });
  }

  // Menu mobilne
  var burger = document.getElementById('burger');
  var panel  = document.getElementById('mobilePanel');
  if (burger && panel) {
    burger.addEventListener('click', function () {
      var open = panel.classList.toggle('open');
      burger.classList.toggle('open', open);
      burger.setAttribute('aria-expanded', open ? 'true' : 'false');
      panel.setAttribute('aria-hidden', open ? 'false' : 'true');
    });
    panel.querySelectorAll('a').forEach(function (a) {
      a.addEventListener('click', function () {
        panel.classList.remove('open');
        burger.classList.remove('open');
        burger.setAttribute('aria-expanded', 'false');
        panel.setAttribute('aria-hidden', 'true');
      });
    });
  }

  var reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;

  // Reveal przy przewijaniu
  var reveals = document.querySelectorAll('.reveal');
  if (reveals.length && 'IntersectionObserver' in window && !reduce) {
    var io = new IntersectionObserver(function (es) {
      es.forEach(function (en) {
        if (en.isIntersecting) { en.target.classList.add('in'); io.unobserve(en.target); }
      });
    }, { threshold: 0.12 });
    reveals.forEach(function (el) { io.observe(el); });
  } else {
    reveals.forEach(function (el) { el.classList.add('in'); });
  }

  // Parallax (bardzo delikatny)
  var pxEls = [].slice.call(document.querySelectorAll('[data-px]'));
  if (!reduce && pxEls.length) {
    var data = pxEls.map(function (el) {
      return { el: el, k: parseFloat(el.dataset.px), cur: 0, tgt: 0 };
    });
    function compute() {
      var vh = innerHeight;
      data.forEach(function (d) {
        var r = d.el.getBoundingClientRect();
        d.tgt = (r.top + r.height / 2 - vh / 2) * d.k;
      });
    }
    function tick() {
      data.forEach(function (d) {
        d.cur += (d.tgt - d.cur) * 0.08;
        d.el.style.transform = 'translate3d(0,' + d.cur.toFixed(2) + 'px,0)';
      });
      requestAnimationFrame(tick);
    }
    addEventListener('scroll', compute, { passive: true });
    addEventListener('resize', compute);
    compute(); tick();
  }

  // FAQ akordeon (dostępny)
  document.querySelectorAll('.faq-q').forEach(function (btn) {
    btn.addEventListener('click', function () {
      var open = btn.getAttribute('aria-expanded') === 'true';
      btn.setAttribute('aria-expanded', open ? 'false' : 'true');
    });
  });

  // Baner cookies
  var bar = document.getElementById('cookieBar');
  if (bar) {
    var has = document.cookie.indexOf('mp_cookie=') !== -1;
    if (!has) { bar.hidden = false; }
    function setConsent(v) {
      document.cookie = 'mp_cookie=' + v + ';path=/;max-age=' + (60 * 60 * 24 * 365) + ';samesite=Lax';
      bar.hidden = true;
    }
    var ok = document.getElementById('cookieAccept');
    var no = document.getElementById('cookieDecline');
    if (ok) ok.addEventListener('click', function () { setConsent('accepted'); });
    if (no) no.addEventListener('click', function () { setConsent('declined'); });
  }
})();
