/**
 * 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<HashCacheContextValue | null>(null);

export function HashCacheProvider({ children }: { children: ReactNode }) {
  const [state, setState] = useState<HashCacheState>({
    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 (
    <HashCacheContext.Provider
      value={{
        ...state,
        setCardHashes,
        clearHashes,
      }}
    >
      {children}
    </HashCacheContext.Provider>
  );
}

export function useHashCache() {
  const context = useContext(HashCacheContext);
  if (!context) {
    throw new Error("useHashCache must be used within HashCacheProvider");
  }
  return context;
}
