/* global React */

const CONSENT_KEY = '85rt_consent_v1';

function loadConsent() {
  try {
    const raw = localStorage.getItem(CONSENT_KEY);
    if (raw) return JSON.parse(raw);
  } catch {}
  return null;
}

function saveConsent(prefs) {
  localStorage.setItem(CONSENT_KEY, JSON.stringify(prefs));
  if (typeof window.gtag === 'function') {
    window.gtag('consent', 'update', {
      analytics_storage:     prefs.analytics  ? 'granted' : 'denied',
      ad_storage:            prefs.marketing  ? 'granted' : 'denied',
      ad_user_data:          prefs.marketing  ? 'granted' : 'denied',
      ad_personalization:    prefs.marketing  ? 'granted' : 'denied',
    });
  }
}

/* ---- Toggle ---- */
function CcToggle({ on, onChange, disabled }) {
  let cls = 'cc-toggle';
  if (on)       cls += ' cc-toggle--on';
  if (disabled) cls += ' cc-toggle--disabled';
  return (
    <button
      type="button"
      role="switch"
      aria-checked={on}
      className={cls}
      onClick={() => !disabled && onChange(!on)}
      aria-disabled={disabled}
    />
  );
}

/* ---- Settings Modal ---- */
function CookieSettingsModal({ onClose }) {
  const saved = loadConsent();
  const [analytics,  setAnalytics]  = React.useState(saved ? saved.analytics  : true);
  const [marketing,  setMarketing]  = React.useState(saved ? saved.marketing  : false);

  function handleSave() {
    saveConsent({ analytics, marketing });
    onClose();
  }

  function handleAcceptAll() {
    setAnalytics(true);
    setMarketing(true);
    saveConsent({ analytics: true, marketing: true });
    onClose();
  }

  return (
    <div className="cc-overlay" role="dialog" aria-modal="true" aria-labelledby="cc-modal-title">
      <div className="cc-modal">
        <button className="cc-modal-close" onClick={onClose} aria-label="Zavrieť">×</button>

        <div className="cc-modal-header">
          <span className="eyebrow">Nastavenia</span>
          <h3 id="cc-modal-title">Nastavenia súkromia</h3>
          <p>
            Používame cookies na zlepšenie vášho zážitku a analýzu návštevnosti.
            Nevyhnutné cookies sú vždy aktívne.
          </p>
        </div>

        <div className="cc-categories">
          <div className="cc-category">
            <div className="cc-category-info">
              <div className="cc-category-title">Nevyhnutné</div>
              <div className="cc-category-desc">Zabezpečujú základné funkcie webu. Nedajú sa vypnúť.</div>
            </div>
            <CcToggle on={true} onChange={() => {}} disabled={true} />
          </div>

          <div className="cc-category">
            <div className="cc-category-info">
              <div className="cc-category-title">Analytické</div>
              <div className="cc-category-desc">Pomáhajú nám pochopiť, ako návštevníci používajú web (Google Analytics).</div>
            </div>
            <CcToggle on={analytics} onChange={setAnalytics} disabled={false} />
          </div>

          <div className="cc-category">
            <div className="cc-category-info">
              <div className="cc-category-title">Marketingové</div>
              <div className="cc-category-desc">Umožňujú personalizovanú reklamu a sledovanie konverzií.</div>
            </div>
            <CcToggle on={marketing} onChange={setMarketing} disabled={false} />
          </div>
        </div>

        <div className="cc-modal-actions">
          <button className="btn btn-primary btn-sm" onClick={handleAcceptAll}>Prijať všetky</button>
          <button className="btn btn-ghost btn-sm" onClick={handleSave}>Uložiť nastavenia</button>
        </div>
      </div>
    </div>
  );
}

/* ---- Banner ---- */
function CookieBanner({ onAcceptAll, onReject, onSettings }) {
  return (
    <div className="cc-banner" role="region" aria-label="Cookie súhlas">
      <div className="cc-banner-inner">
        <div className="cc-banner-text">
          <p>
            Používame cookies na analýzu návštevnosti a zlepšenie webu.
            Pokračovaním súhlasíte s ich používaním.
          </p>
          <a href="/cookie-policy" className="cc-policy-link">Zásady cookies</a>
        </div>
        <div className="cc-banner-actions">
          <button className="btn btn-primary btn-sm" onClick={onAcceptAll}>Prijať všetky</button>
          <button className="btn btn-ghost btn-sm" onClick={onSettings}>Nastavenia</button>
          <button className="cc-reject-link" onClick={onReject}>Odmietnuť</button>
        </div>
      </div>
    </div>
  );
}

/* ---- Top-level orchestrator ---- */
function CookieConsent() {
  const [consent, setConsent] = React.useState(() => loadConsent());
  const [showModal, setShowModal] = React.useState(false);

  React.useEffect(() => {
    function openSettings() { setShowModal(true); }
    document.addEventListener('85rt:open-cookie-settings', openSettings);
    return () => document.removeEventListener('85rt:open-cookie-settings', openSettings);
  }, []);

  function acceptAll() {
    const prefs = { analytics: true, marketing: true };
    saveConsent(prefs);
    setConsent(prefs);
  }

  function rejectAll() {
    const prefs = { analytics: false, marketing: false };
    saveConsent(prefs);
    setConsent(prefs);
  }

  function closeModal() {
    setConsent(loadConsent());
    setShowModal(false);
  }

  const showBanner = consent === null;

  return (
    <React.Fragment>
      {showBanner && !showModal && (
        <CookieBanner
          onAcceptAll={acceptAll}
          onReject={rejectAll}
          onSettings={() => setShowModal(true)}
        />
      )}
      {showModal && <CookieSettingsModal onClose={closeModal} />}
    </React.Fragment>
  );
}
