// 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 {
  calculatorState: { currentDisplay: string; previousValue: number | null; currentOperator: string | null; awaitingOperand: boolean; isResultDisplayed: boolean; memory: number };
  setCalculatorState: (value: { currentDisplay: string; previousValue: number | null; currentOperator: string | null; awaitingOperand: boolean; isResultDisplayed: boolean; memory: number }) => void;
  sessionHistory: Array<{ id: string; operand1: number; operator: string; operand2: number; result: number; timestamp: string; expression: string }>;
  setSessionHistory: (value: Array<{ id: string; operand1: number; operator: string; operand2: number; result: number; timestamp: string; expression: string }>) => void;
  sessionId: string;
  clearSession: () => void;
}

const useAppStore = create<AppState>()((
  persist(
    (set) => ({
    sessionId: crypto.randomUUID(),
    calculatorState: { "currentDisplay": "0", "previousValue": null, "currentOperator": null, "awaitingOperand": false, "isResultDisplayed": false, "memory": 0 },
    sessionHistory: [],
    setCalculatorState: (value) => set({ calculatorState: value }),
    setSessionHistory: (value) => set({ sessionHistory: value }),
    clearSession: () => set({ sessionId: crypto.randomUUID(), calculatorState: { "currentDisplay": "0", "previousValue": null, "currentOperator": null, "awaitingOperand": false, "isResultDisplayed": false, "memory": 0 }, sessionHistory: [] }),
    }),
    {
      name: 'simple_calculator_session',
      storage: createJSONStorage(() => sessionStorage),
    },
  )
));

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

export { useAppStore, useAppContext };
