import React, { createContext, useContext, useState, useCallback, ReactNode } from 'react'; export interface ChatMessage { id: string; role: 'user' | 'assistant'; content: string; timestamp: number; type?: 'general' | 'agent' | 'compare'; agentName?: string; } export interface toolsUser { email: string; id: string; is_active: boolean; is_superuser: boolean; is_verified: boolean; pages_limit: number; pages_used: string; yUserId: string; } interface ChatContextType { messages: ChatMessage[]; addMessage: (role: 'user' | 'assistant', content: string, type?: 'general' | 'agent' | 'compare', agentName?: string) => void; clearMessages: () => void; deleteMessage: (id: string) => void; startConfig: unknown; setStartConfig: (val: unknown) => void; toolsUser: toolsUser | null; setToolsUser: (val: toolsUser) => void; } const ChatContext = createContext(undefined); export function ChatProvider({ children }: { children: ReactNode }) { const [messages, setMessages] = useState(() => { try { const stored = localStorage.getItem('qa-chat-history'); return stored ? JSON.parse(stored) : []; } catch { return []; } }); const [startConfig, setStartConfig] = useState(null); const [toolsUser, setToolsUser] = useState(null); const saveToStorage = useCallback((newMessages: ChatMessage[]) => { try { localStorage.setItem('qa-chat-history', JSON.stringify(newMessages)); } catch (error) { console.error('Failed to save chat history:', error); } }, []); const addMessage = useCallback((role: 'user' | 'assistant', content: string, type?: 'general' | 'agent' | 'compare', agentName?: string) => { const newMessage: ChatMessage = { id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, role, content, timestamp: Date.now(), type, agentName, }; setMessages((prev) => { const updated = [...prev, newMessage]; saveToStorage(updated); return updated; }); }, [saveToStorage]); const clearMessages = useCallback(() => { setMessages([]); localStorage.removeItem('qa-chat-history'); }, []); const deleteMessage = useCallback((id: string) => { setMessages((prev) => { const updated = prev.filter((msg) => msg.id !== id); saveToStorage(updated); return updated; }); }, [saveToStorage]); return ( {children} ); } export function useChatContext() { const context = useContext(ChatContext); if (context === undefined) { throw new Error('useChatContext must be used within a ChatProvider'); } return context; }