import { useState, useEffect } from 'react' import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent, DialogFooter, } from '@/components/molecules/Dialog' import { Button } from '@/components/atoms/Button' import { Input } from '@/components/atoms/Input' import { Alert } from '@/components/molecules/Alert' import { Badge } from '@/components/atoms/Badge' import { getEndpoint, getApiKey, saveCredentials, testConnection, } from '@/lib/credentials' export interface ApiSettingsProps { open: boolean onClose: () => void /** Called after credentials are saved (e.g. to refresh a "no API key" badge). */ onSaved?: () => void } /** * Shared API-settings dialog for the SDC tool suite. Reads/writes the suite-wide * `sdc_api_endpoint` + `sdc_api_key` so the key is entered once across all tools. */ export function ApiSettings({ open, onClose, onSaved }: ApiSettingsProps) { const [endpoint, setEndpoint] = useState('') const [apiKey, setApiKey] = useState('') const [status, setStatus] = useState<{ type: 'success' | 'error' | 'info'; message: string } | null>(null) const [testing, setTesting] = useState(false) const [models, setModels] = useState([]) useEffect(() => { if (open) { setEndpoint(getEndpoint()) setApiKey(getApiKey()) setStatus(null) setModels([]) } }, [open]) function handleSave() { if (!endpoint.trim()) { setStatus({ type: 'error', message: 'Please enter a gateway endpoint.' }) return } if (!apiKey.trim()) { setStatus({ type: 'error', message: 'Please enter an API key.' }) return } saveCredentials(endpoint, apiKey) onSaved?.() setStatus({ type: 'success', message: 'Credentials saved. They apply across all SDC tools.' }) } async function handleTest() { if (!endpoint.trim() || !apiKey.trim()) { setStatus({ type: 'error', message: 'Enter an endpoint and key first.' }) return } saveCredentials(endpoint, apiKey) onSaved?.() setTesting(true) setStatus({ type: 'info', message: 'Testing connection…' }) setModels([]) try { const result = await testConnection(endpoint, apiKey) setModels(result.models) setStatus({ type: 'success', message: 'Connected. ' + result.models.length + ' model(s) available.', }) } catch (e) { setStatus({ type: 'error', message: (e as Error).message }) } finally { setTesting(false) } } return ( API Settings Configure your gateway connection. This is shared across all SDC tools.
setEndpoint(e.target.value)} /> setApiKey(e.target.value)} /> {status && ( setStatus(null)} > {status.message} )} {models.length > 0 && (

Available Models

{models.map((m) => ( {m} ))}
)}
) }