'use client'; import { createContext, useContext, useState, useCallback } from 'react'; import type { TickerData, TickerMeta } from '@/types/crypto'; interface CryptoContextType { selectedMarket: string; setSelectedMarket: (market: string) => void; quoteMarket: string; setQuoteMarket: (quote: string) => void; tickers: Map; setTickers: (tickers: Map) => void; tickerMeta: Map; setTickerMeta: (meta: Map) => void; } const CryptoContext = createContext({ selectedMarket: 'KRW-BTC', setSelectedMarket: () => {}, quoteMarket: 'KRW', setQuoteMarket: () => {}, tickers: new Map(), setTickers: () => {}, tickerMeta: new Map(), setTickerMeta: () => {}, }); type Props = { children: React.ReactNode; initialMarket?: string; }; export function CryptoProvider({ children, initialMarket = 'KRW-BTC' }: Props) { const [selectedMarket, setSelectedMarketState] = useState(initialMarket); const [quoteMarket, setQuoteMarketState] = useState('KRW'); const [tickers, setTickersState] = useState>(new Map()); const [tickerMeta, setTickerMetaState] = useState>(new Map()); const setSelectedMarket = useCallback((market: string) => { setSelectedMarketState(market); }, []); const setQuoteMarket = useCallback((quote: string) => { setQuoteMarketState(quote); }, []); const setTickers = useCallback((t: Map) => { setTickersState(t); }, []); const setTickerMeta = useCallback((m: Map) => { setTickerMetaState(m); }, []); return ( {children} ); } export function useCryptoContext() { return useContext(CryptoContext); }