// 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 {
  currentCalculation: { id: string; principal: number; annualInterestRate: number; loanTermMonths: number; monthlyPayment: number; totalPayment: number; totalInterest: number } | null;
  setCurrentCalculation: (value: { id: string; principal: number; annualInterestRate: number; loanTermMonths: number; monthlyPayment: number; totalPayment: number; totalInterest: number } | null) => void;
  calculatorDefaults: { defaultPrincipal: number; defaultInterestRate: number; defaultTermMonths: number; minPrincipal: number; maxPrincipal: number; minInterestRate: number; maxInterestRate: number; minTermMonths: number; maxTermMonths: number } | null;
  setCalculatorDefaults: (value: { defaultPrincipal: number; defaultInterestRate: number; defaultTermMonths: number; minPrincipal: number; maxPrincipal: number; minInterestRate: number; maxInterestRate: number; minTermMonths: number; maxTermMonths: number } | null) => void;
  sessionId: string;
  clearSession: () => void;
}

const useAppStore = create<AppState>()((
  persist(
    (set) => ({
    sessionId: crypto.randomUUID(),
    currentCalculation: null,
    calculatorDefaults: null,
    setCurrentCalculation: (value) => set({ currentCalculation: value }),
    setCalculatorDefaults: (value) => set({ calculatorDefaults: value }),
    clearSession: () => set({ sessionId: crypto.randomUUID(), currentCalculation: null, calculatorDefaults: null }),
    }),
    {
      name: 'loan_calculator_session',
      storage: createJSONStorage(() => sessionStorage),
    },
  )
));

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

export { useAppStore, useAppContext };
