import { create } from "zustand"; export type View = "landing" | "auth" | "dashboard"; export interface InvoiceRow { id: string; filename: string | null; vendor: string | null; invNumber: string | null; invDate: string | null; dueDate: string | null; amount: number | null; vatAmount: number | null; total: number | null; currency: string; status: string; isDuplicate: boolean; confidence: number | null; createdAt: string; } export interface UserProfile { id: string; email: string; name: string; plan: string; apiKey: string | null; createdAt: string; } interface ChatMessage { role: "user" | "assistant"; content: string; } interface AppState { view: View; user: UserProfile | null; isLoading: boolean; invoices: InvoiceRow[]; chatHistory: ChatMessage[]; uploadResults: InvoiceRow[] | null; uploadLoading: boolean; chatLoading: boolean; activeDashTab: string; setView: (view: View) => void; setUser: (user: UserProfile | null) => void; setLoading: (loading: boolean) => void; setInvoices: (invoices: InvoiceRow[]) => void; addChatMessage: (message: ChatMessage) => void; clearChat: () => void; setUploadResults: (results: InvoiceRow[] | null) => void; setUploadLoading: (loading: boolean) => void; setChatLoading: (loading: boolean) => void; setActiveDashTab: (tab: string) => void; logout: () => void; } export const useAppStore = create((set) => ({ view: "landing", user: null, isLoading: true, invoices: [], chatHistory: [], uploadResults: null, uploadLoading: false, chatLoading: false, activeDashTab: "upload", setView: (view) => set({ view }), setUser: (user) => set({ user, isLoading: false }), setLoading: (isLoading) => set({ isLoading }), setInvoices: (invoices) => set({ invoices }), addChatMessage: (message) => set((state) => ({ chatHistory: [...state.chatHistory, message] })), clearChat: () => set({ chatHistory: [] }), setUploadResults: (uploadResults) => set({ uploadResults }), setUploadLoading: (uploadLoading) => set({ uploadLoading }), setChatLoading: (chatLoading) => set({ chatLoading }), setActiveDashTab: (activeDashTab) => set({ activeDashTab }), logout: () => set({ user: null, view: "landing", invoices: [], chatHistory: [], uploadResults: null, activeDashTab: "upload", }), }));