// Zustand store for app-level shared state (persisted to sessionStorage).
// No provider needed — import useAppStore or useAppContext anywhere.

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

interface AppState {
  currentUser: { id: string; email: string; displayName: string; role: 'guest' | 'buyer' | 'seller' | 'admin' | 'moderator'; avatarUrl: string | null; isEmailVerified: boolean; isSeller: boolean } | null;
  setCurrentUser: (value: { id: string; email: string; displayName: string; role: 'guest' | 'buyer' | 'seller' | 'admin' | 'moderator'; avatarUrl: string | null; isEmailVerified: boolean; isSeller: boolean } | null) => void;
  cartItemCount: number;
  setCartItemCount: (value: number) => void;
  unreadNotificationCount: number;
  setUnreadNotificationCount: (value: number) => void;
  unreadMessageCount: number;
  setUnreadMessageCount: (value: number) => void;
  cartId: string | null;
  setCartId: (value: string | null) => void;
  sessionId: string;
  clearSession: () => void;
}

const useAppStore = create<AppState>()((
  persist(
    (set) => ({
    sessionId: crypto.randomUUID(),
    currentUser: null,
    cartItemCount: 0,
    unreadNotificationCount: 0,
    unreadMessageCount: 0,
    cartId: null,
    setCurrentUser: (value) => set({ currentUser: value }),
    setCartItemCount: (value) => set({ cartItemCount: value }),
    setUnreadNotificationCount: (value) => set({ unreadNotificationCount: value }),
    setUnreadMessageCount: (value) => set({ unreadMessageCount: value }),
    setCartId: (value) => set({ cartId: value }),
    clearSession: () => set({ sessionId: crypto.randomUUID(), currentUser: null, cartItemCount: 0, unreadNotificationCount: 0, unreadMessageCount: 0, cartId: null }),
    }),
    {
      name: 'pokeresell_session',
      storage: createJSONStorage(() => sessionStorage),
    },
  )
));

// Convenience alias — pages import useAppContext.
const useAppContext = useAppStore;

export { useAppStore, useAppContext };
