import { createContext, useContext, useEffect, useState, type ReactNode } from "react";

export type Consent = { statistics: boolean; marketing: boolean; decided: boolean };
const KEY = "dome_cookie_consent";
const initial: Consent = { statistics: false, marketing: false, decided: false };

type Ctx = { consent: Consent; save: (c: Omit<Consent, "decided">) => void; open: boolean; setOpen: (o: boolean) => void };
const C = createContext<Ctx>({ consent: initial, save: () => {}, open: false, setOpen: () => {} });

export function ConsentProvider({ children }: { children: ReactNode }) {
  const [consent, setConsent] = useState<Consent>(initial);
  const [open, setOpen] = useState(false);
  useEffect(() => {
    try {
      const v = localStorage.getItem(KEY);
      if (v) setConsent({ ...JSON.parse(v), decided: true });
      else setOpen(true);
    } catch {
      setOpen(true);
    }
  }, []);
  const save = (c: Omit<Consent, "decided">) => {
    localStorage.setItem(KEY, JSON.stringify(c));
    setConsent({ ...c, decided: true });
    setOpen(false);
  };
  return <C.Provider value={{ consent, save, open, setOpen }}>{children}</C.Provider>;
}
export const useConsent = () => useContext(C);
