import { create } from 'zustand';
import { persist } from 'zustand/middleware';

interface CookieConsentPrefs {
  functional: boolean;
  analytics: boolean;
  marketing: boolean;
}

interface CookieConsentState extends CookieConsentPrefs {
  hasConsented: boolean;
  hasHydrated: boolean;
  setHasHydrated: (v: boolean) => void;
  acceptAll: () => void;
  rejectAll: () => void;
  savePreferences: (prefs: CookieConsentPrefs) => void;
}

export const useCookieConsentStore = create<CookieConsentState>()(
  persist(
    (set) => ({
      // GDPR-safe defaults: all non-essential off until explicit consent
      hasConsented: false,
      hasHydrated: false,
      functional: false,
      analytics: false,
      marketing: false,

      setHasHydrated: (v) => set({ hasHydrated: v }),

      acceptAll: () =>
        set({ hasConsented: true, functional: true, analytics: true, marketing: true }),

      rejectAll: () =>
        set({ hasConsented: true, functional: false, analytics: false, marketing: false }),

      savePreferences: (prefs) =>
        set({ hasConsented: true, ...prefs }),
    }),
    {
      name: 'cahoo-cookie-consent',
      onRehydrateStorage: () => (state) => {
        state?.setHasHydrated(true);
      },
    }
  )
);
