"use client";
import { useEffect, useState } from "react";
import Link from "next/link";

const COOKIE = "kiln-analytics-consent-v1";
const MAX_AGE = 365 * 24 * 60 * 60;

function loadMetrika(id: number) {
  if (!id || document.getElementById("yandex-metrika-script")) return;
  (window as typeof window & Record<string, unknown>)[`ya_disable_Metrika_${id}`] = false;
  const script = document.createElement("script");
  script.id = "yandex-metrika-script"; script.async = true; script.src = "https://mc.yandex.ru/metrika/tag.js";
  script.onload = () => { window.ym?.(id, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true }); };
  document.head.appendChild(script);
}

function eraseMetrikaCookies() {
  for (const part of document.cookie.split(";")) { const name = part.split("=")[0]?.trim(); if (name?.startsWith("_ym_")) document.cookie = `${name}=; Max-Age=0; Path=/; SameSite=Lax`; }
}

export function CookieConsent({ metrikaId }: { metrikaId: number }) {
  const [choice, setChoice] = useState<"accepted" | "rejected" | null>(null);
  useEffect(() => { const found = document.cookie.split("; ").find((part) => part.startsWith(`${COOKIE}=`))?.split("=")[1]; if (found === "accepted" || found === "rejected") { setChoice(found); if (found === "accepted") loadMetrika(metrikaId); } }, [metrikaId]);
  async function choose(value: "accepted" | "rejected") { document.cookie = `${COOKIE}=${value}; Max-Age=${MAX_AGE}; Path=/; SameSite=Lax${location.protocol === "https:" ? "; Secure" : ""}`; setChoice(value); (window as typeof window & Record<string, unknown>)[`ya_disable_Metrika_${metrikaId}`] = value !== "accepted"; if (value === "accepted") loadMetrika(metrikaId); else eraseMetrikaCookies(); await fetch("/api/privacy/consent", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ purpose: "analytics", granted: value === "accepted", revision: 1 }) }).catch(() => undefined); }
  if (choice) return <button className="fixed bottom-3 left-3 z-40 rounded bg-kiln-black/90 px-3 py-2 text-xs text-kiln-milk/60" onClick={() => setChoice(null)}>Настройки cookie</button>;
  return <section className="fixed inset-x-3 bottom-3 z-[100] mx-auto max-w-3xl rounded-xl border border-white/15 bg-kiln-black p-5 shadow-2xl"><p className="text-sm">Технические cookie нужны для работы сайта. Аналитические cookie Яндекс Метрики загружаются только с вашего согласия. <Link className="text-kiln-flame underline" href="/cookies">Подробнее</Link>.</p><div className="mt-4 grid gap-2 sm:grid-cols-2"><button className="button button-secondary" onClick={() => void choose("rejected")}>Отказаться</button><button className="button button-secondary" onClick={() => void choose("accepted")}>Разрешить аналитику</button></div></section>;
}
