import { createContext, useContext, type ReactNode } from 'react'; import { RechargeModal } from '../components/RechargeModal'; import { SubscribeModal } from '../components/SubscribeModal'; import { useTKMindChat } from '../hooks/useTKMindChat'; import type { CapabilityMap, PortalUser } from '../types'; type ChatContextValue = ReturnType; const ChatContext = createContext(null); export function ChatProvider({ user, capabilities, grantedSkills, goalRunEnabled, onUserUpdate, children, }: { user?: PortalUser | null; capabilities?: CapabilityMap | null; grantedSkills?: string[]; goalRunEnabled?: boolean; onUserUpdate?: (user: PortalUser) => void; children: ReactNode; }) { const chat = useTKMindChat(user, onUserUpdate, capabilities, grantedSkills); return ( {children} {typeof chat.balanceCents === 'number' && chat.rechargePrompt && ( { chat.completeRecharge(nextBalance); }} /> )} { chat.completeSubscribe(balanceCents, subscription); }} onRechargeNeeded={() => { chat.dismissSubscribe(); chat.openRecharge(false); }} /> ); } export function useChat(): ChatContextValue { const value = useContext(ChatContext); if (!value) { throw new Error('useChat must be used within ChatProvider'); } return value; }