import React, { useState, useEffect } from 'react' import { QRCodeSVG } from 'qrcode.react' import { Trash2, Brain, ExternalLink } from 'lucide-react' import type { AIModel } from '../../types' import type { Language } from '../../i18n/translations' import { t } from '../../i18n/translations' import { api } from '../../lib/api' import { getModelIcon } from '../common/ModelIcons' import { ModelStepIndicator } from './ModelStepIndicator' import { ModelCard } from './ModelCard' import { CLAW402_MODELS, AI_PROVIDER_CONFIG, getShortName, } from './model-constants' import { getBeginnerWalletAddress, getUserMode } from '../../lib/onboarding' interface ModelConfigModalProps { allModels: AIModel[] configuredModels: AIModel[] editingModelId: string | null onSave: ( modelId: string, apiKey: string, baseUrl?: string, modelName?: string ) => void onDelete: (modelId: string) => void onClose: () => void language: Language } export function ModelConfigModal({ allModels, configuredModels, editingModelId, onSave, onDelete, onClose, language, }: ModelConfigModalProps) { const [currentStep, setCurrentStep] = useState(editingModelId ? 1 : 0) const [selectedModelId, setSelectedModelId] = useState(editingModelId || '') const [apiKey, setApiKey] = useState('') const [baseUrl, setBaseUrl] = useState('') const [modelName, setModelName] = useState('') const configuredModel = configuredModels?.find((model) => model.id === selectedModelId) || null // Always prefer allModels (supportedModels) for provider/id lookup; // fall back to configuredModels for edit mode details (apiKey etc.) const selectedModel = allModels?.find((m) => m.id === selectedModelId) || configuredModel useEffect(() => { const modelDetails = configuredModel || selectedModel if (editingModelId && modelDetails) { setApiKey(modelDetails.apiKey || '') setBaseUrl(modelDetails.customApiUrl || '') setModelName(modelDetails.customModelName || '') } }, [editingModelId, configuredModel, selectedModel]) const handleSelectModel = (modelId: string) => { setSelectedModelId(modelId) setCurrentStep(1) } const handleBack = () => { if (editingModelId) { onClose() } else { setCurrentStep(0) setSelectedModelId('') } } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (!selectedModelId || !apiKey.trim()) return onSave(selectedModelId, apiKey.trim(), baseUrl.trim() || undefined, modelName.trim() || undefined) } const availableModels = allModels || [] const configuredIds = new Set(configuredModels?.map(m => m.id) || []) const isClaw402Selected = selectedModel?.provider === 'claw402' || selectedModel?.id === 'claw402' const isBeginnerDefaultModel = isClaw402Selected && getUserMode() === 'beginner' const stepLabels = [ t('modelConfig.selectModel', language), t( !selectedModel ? 'modelConfig.configure' : isClaw402Selected ? 'modelConfig.configureWallet' : 'modelConfig.configure', language ), ] return (