import React, { useState, useEffect } from 'react' import { X, AlertCircle, CheckCircle } from 'lucide-react' import { type Model, availableModels } from '../types/models' import { hasApiKey, setApiKey, clearApiKey } from '../utils/apiKeys' import ApiKeyModal from './ApiKeyModal' interface ModelSelectionModalProps { isOpen: boolean onClose: () => void selectedModel: Model onModelChange: (model: Model) => void apiKeyUpdateTrigger: number } const ModelSelectionModal: React.FC = ({ isOpen, onClose, selectedModel, onModelChange, apiKeyUpdateTrigger, }) => { const [apiKeyModal, setApiKeyModal] = useState<{ isOpen: boolean; model: Model | null }>({ isOpen: false, model: null, }) const [apiKeyStatuses, setApiKeyStatuses] = useState>({}) useEffect(() => { const statuses: Record = {} availableModels.forEach(model => { statuses[model.provider.id] = hasApiKey(model.provider.id) }) setApiKeyStatuses(statuses) }, [apiKeyUpdateTrigger]) useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden' } else { document.body.style.overflow = 'unset' } return () => { document.body.style.overflow = 'unset' } }, [isOpen]) const handleModelSelect = (model: Model) => { const hasKey = hasApiKey(model.provider.id) if (!hasKey) { setApiKeyModal({ isOpen: true, model }) } else { onModelChange(model) onClose() } } const handleApiKeySave = (apiKey: string) => { if (apiKeyModal.model) { setApiKey(apiKeyModal.model.provider.id, apiKey) setApiKeyStatuses(prev => ({ ...prev, [apiKeyModal.model!.provider.id]: true })) onModelChange(apiKeyModal.model) setApiKeyModal({ isOpen: false, model: null }) onClose() } } const handleClearApiKey = (providerId: string, e: React.MouseEvent) => { e.stopPropagation() clearApiKey(providerId) setApiKeyStatuses(prev => ({ ...prev, [providerId]: false })) } const getStatusIcon = (providerId: string) => { const hasKey = apiKeyStatuses[providerId] if (hasKey) { return } else { return } } if (!isOpen) return null return ( <>

Select Model

{availableModels.map((model) => { const isSelected = model.id === selectedModel.id const hasKey = apiKeyStatuses[model.provider.id] return (
handleModelSelect(model)} >
{model.provider.logo}
{model.name}
{model.provider.name}
{getStatusIcon(model.provider.id)} {hasKey ? 'Configured' : 'Not configured'} {hasKey && ( )}
) })}
setApiKeyModal({ isOpen: false, model: null })} provider={apiKeyModal.model?.provider ?? { id: '', name: '', baseUrl: '', apiKeyHeader: '', documentationUrl: '' }} onSave={handleApiKeySave} /> ) } export default ModelSelectionModal