/* Gridea site — cookie consent + gated analytics.

   The site sets ZERO cookies until the visitor consents. Necessary "cookies" here
   are only this consent record in localStorage (functional, not tracking). GA4 is
   loaded ONLY after analytics consent — before that, nothing contacts Google and no
   analytics cookie exists. Marketing is a category reserved for a future retargeting
   pixel (no pixel is loaded yet — there is no ad account).

   Rendered globally by SiteApp so the banner appears on every marketing page. The
   standalone utility pages (volitus, questionnaire) don't mount this and stay
   cookie-free by construction. Reopen the chooser anywhere via window.grideaOpenConsent(). */

const CONSENT_KEY = 'gridea_consent';
const GA4_ID = 'G-KDHSJGPN4J';
const COOKIE_SLUG = { et: 'kupsised', en: 'cookies', ru: 'cookie' };

function loadConsent() { try { return JSON.parse(localStorage.getItem(CONSENT_KEY)); } catch (e) { return null; } }
function saveConsent(c) { try { localStorage.setItem(CONSENT_KEY, JSON.stringify({ ...c, ts: Date.now() })); } catch (e) {} }

let ga4Loaded = false;
function loadGA4() {
  if (ga4Loaded || typeof document === 'undefined') return;
  ga4Loaded = true;
  const s = document.createElement('script');
  s.async = true;
  s.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA4_ID;
  document.head.appendChild(s);
  window.dataLayer = window.dataLayer || [];
  function gtag() { window.dataLayer.push(arguments); }
  window.gtag = gtag;
  gtag('js', new Date());
  gtag('config', GA4_ID, { anonymize_ip: true });
}
// Withdrawal: drop the GA cookies so "necessary only" really means no analytics state.
function clearGA() {
  try {
    document.cookie.split(';').forEach((c) => {
      const n = c.split('=')[0].trim();
      if (n.startsWith('_ga')) {
        document.cookie = n + '=; Max-Age=0; path=/';
        document.cookie = n + '=; Max-Age=0; path=/; domain=.gridea.io';
      }
    });
  } catch (e) {}
}

const CONSENT_T = {
  et: {
    title: 'Küpsised', text: 'Kasutame saidi toimimiseks vajalikke küpsiseid ja — sinu nõusolekul — analüütikat, et saiti paremaks teha. ',
    policy: 'Loe lähemalt', acceptAll: 'Nõustu kõigiga', necessary: 'Ainult vajalikud', customize: 'Kohanda', save: 'Salvesta valik',
    catNecessary: 'Vajalikud', catNecessaryDesc: 'Alati sees — saidi põhitoimimiseks.',
    catAnalytics: 'Analüütika', catAnalyticsDesc: 'Google Analytics — aitab mõista, kuidas saiti kasutatakse.',
    catMarketing: 'Turundus', catMarketingDesc: 'Taasturundus (pole hetkel kasutuses).',
  },
  en: {
    title: 'Cookies', text: 'We use cookies necessary for the site to work and — with your consent — analytics to improve it. ',
    policy: 'Learn more', acceptAll: 'Accept all', necessary: 'Necessary only', customize: 'Customise', save: 'Save choice',
    catNecessary: 'Necessary', catNecessaryDesc: 'Always on — for the site to work.',
    catAnalytics: 'Analytics', catAnalyticsDesc: 'Google Analytics — helps us understand how the site is used.',
    catMarketing: 'Marketing', catMarketingDesc: 'Retargeting (not currently in use).',
  },
  ru: {
    title: 'Файлы cookie', text: 'Мы используем необходимые для работы сайта файлы cookie и — с вашего согласия — аналитику, чтобы улучшать сайт. ',
    policy: 'Подробнее', acceptAll: 'Принять все', necessary: 'Только необходимые', customize: 'Настроить', save: 'Сохранить выбор',
    catNecessary: 'Необходимые', catNecessaryDesc: 'Всегда включены — для работы сайта.',
    catAnalytics: 'Аналитика', catAnalyticsDesc: 'Google Analytics — помогает понять, как используется сайт.',
    catMarketing: 'Маркетинг', catMarketingDesc: 'Ретаргетинг (сейчас не используется).',
  },
};

function ConsentManager() {
  const lang = useLang();
  const T = CONSENT_T[lang] || CONSENT_T.et;
  const [open, setOpen] = React.useState(false);
  const [custom, setCustom] = React.useState(false);
  const [analytics, setAnalytics] = React.useState(true);
  const [marketing, setMarketing] = React.useState(false);

  React.useEffect(() => {
    const c = loadConsent();
    if (c) { if (c.analytics) loadGA4(); }
    else setOpen(true);
    window.grideaOpenConsent = () => {
      const cur = loadConsent() || {};
      setAnalytics(cur.analytics !== false);
      setMarketing(!!cur.marketing);
      setCustom(true);
      setOpen(true);
    };
    return () => { try { delete window.grideaOpenConsent; } catch (e) {} };
  }, []);

  if (!open) return null;

  const apply = (a, m) => {
    saveConsent({ necessary: true, analytics: a, marketing: m });
    if (a) loadGA4(); else clearGA();
    setOpen(false);
    setCustom(false);
  };
  const policyHref = '/' + lang + '/' + COOKIE_SLUG[lang];

  return (
    <div className="consent" role="dialog" aria-label={T.title} aria-live="polite">
      <div className="consent-inner">
        <div className="consent-text">
          <strong>{T.title}</strong>
          <p>{T.text}<a href={policyHref}>{T.policy}</a>.</p>
          {custom && (
            <div className="consent-cats">
              <label className="consent-cat"><input type="checkbox" checked disabled /> <span><b>{T.catNecessary}</b> — {T.catNecessaryDesc}</span></label>
              <label className="consent-cat"><input type="checkbox" checked={analytics} onChange={(e) => setAnalytics(e.target.checked)} /> <span><b>{T.catAnalytics}</b> — {T.catAnalyticsDesc}</span></label>
              <label className="consent-cat"><input type="checkbox" checked={marketing} onChange={(e) => setMarketing(e.target.checked)} /> <span><b>{T.catMarketing}</b> — {T.catMarketingDesc}</span></label>
            </div>
          )}
        </div>
        <div className="consent-actions">
          {custom ? (
            <button className="btn btn-primary btn-sm" onClick={() => apply(analytics, marketing)}>{T.save}</button>
          ) : (
            <>
              <button className="btn btn-ghost btn-sm" onClick={() => apply(false, false)}>{T.necessary}</button>
              <button className="btn btn-ghost btn-sm" onClick={() => setCustom(true)}>{T.customize}</button>
              <button className="btn btn-primary btn-sm" onClick={() => apply(true, true)}>{T.acceptAll}</button>
            </>
          )}
        </div>
      </div>
    </div>
  );
}

window.ConsentManager = ConsentManager;

// Conversion tracking — fires a GA4 event only if analytics consent has loaded gtag.
// No-op before consent, so it never sets a cookie or contacts Google without permission.
window.grideaTrack = function (name, params) {
  try { if (typeof window.gtag === 'function') window.gtag('event', name, params || {}); } catch (e) {}
};
