import { create } from 'zustand' interface DashboardState { selectedPostId: number | null asset: 'BTC' | 'ETH' timeframe: '5m' | '15m' | '1H' | '4H' | '1D' | '1W' walletAddress: string | null isSubscribed: boolean botReadiness: 'unknown' | 'saved' | 'verified' | 'ready' hlApiKeySet: boolean // true if user already has a key saved in backend hlApiKeyMasked: string | null // e.g. "...a1b2c3" shown after successful save livePrices: { BTC: number | null; ETH: number | null } setSelectedPost: (id: number | null) => void setAsset: (asset: 'BTC' | 'ETH') => void setTimeframe: (tf: '5m' | '15m' | '1H' | '4H' | '1D' | '1W') => void setWallet: (address: string | null) => void setSubscribed: (subscribed: boolean) => void setBotReadiness: (state: DashboardState['botReadiness']) => void setHlApiKeySet: (set: boolean, masked?: string) => void setLivePrice: (asset: 'BTC' | 'ETH', price: number) => void } export const useDashboardStore = create((set) => ({ selectedPostId: null, asset: 'BTC', timeframe: '4H', walletAddress: null, isSubscribed: false, botReadiness: 'unknown', hlApiKeySet: false, hlApiKeyMasked: null, livePrices: { BTC: null, ETH: null }, setSelectedPost: (id) => set({ selectedPostId: id }), setAsset: (asset) => set({ asset }), setTimeframe: (timeframe) => set({ timeframe }), setWallet: (walletAddress) => set({ walletAddress }), setSubscribed: (isSubscribed) => set({ isSubscribed }), setBotReadiness: (botReadiness) => set({ botReadiness }), setHlApiKeySet: (keySet, masked) => set((s) => ({ hlApiKeySet: keySet, // Preserve existing mask when called without one (e.g. the /public poll // only returns a boolean). Only explicitly clear when keySet=false. hlApiKeyMasked: !keySet ? null : (masked !== undefined ? masked : s.hlApiKeyMasked), })), setLivePrice: (asset, price) => set((s) => ({ livePrices: { ...s.livePrices, [asset]: price } })), }))