/** * React Context for card hash cache. * Provides offline-first hash data for card recognition. */ import React, { createContext, useContext, useState, useCallback, type ReactNode } from "react"; import type { CardHashEntry } from "../recognition"; interface HashCacheState { cardHashes: CardHashEntry[]; hashesLoaded: boolean; lastHashSync: number; } interface HashCacheContextValue extends HashCacheState { setCardHashes: (hashes: CardHashEntry[]) => void; clearHashes: () => void; } const HashCacheContext = createContext(null); export function HashCacheProvider({ children }: { children: ReactNode }) { const [state, setState] = useState({ cardHashes: [], hashesLoaded: false, lastHashSync: 0, }); const setCardHashes = useCallback((hashes: CardHashEntry[]) => { setState({ cardHashes: hashes, hashesLoaded: true, lastHashSync: Date.now(), }); }, []); const clearHashes = useCallback(() => { setState({ cardHashes: [], hashesLoaded: false, lastHashSync: 0, }); }, []); return ( {children} ); } export function useHashCache() { const context = useContext(HashCacheContext); if (!context) { throw new Error("useHashCache must be used within HashCacheProvider"); } return context; }