import { useState } from 'react'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import { useI18n } from '@/lib/hooks/use-i18n'; import { useSettingsStore } from '@/lib/store/settings'; import { WEB_SEARCH_PROVIDERS } from '@/lib/web-search/constants'; import type { WebSearchProviderId } from '@/lib/web-search/types'; import { Eye, EyeOff } from 'lucide-react'; interface WebSearchSettingsProps { selectedProviderId: WebSearchProviderId; } export function WebSearchSettings({ selectedProviderId }: WebSearchSettingsProps) { const { t } = useI18n(); const [showApiKey, setShowApiKey] = useState(false); const webSearchProvidersConfig = useSettingsStore((state) => state.webSearchProvidersConfig); const setWebSearchProviderConfig = useSettingsStore((state) => state.setWebSearchProviderConfig); const provider = WEB_SEARCH_PROVIDERS[selectedProviderId]; const isServerConfigured = !!webSearchProvidersConfig[selectedProviderId]?.isServerConfigured; // Reset showApiKey when provider changes (derived state pattern) const [prevSelectedProviderId, setPrevSelectedProviderId] = useState(selectedProviderId); if (selectedProviderId !== prevSelectedProviderId) { setPrevSelectedProviderId(selectedProviderId); setShowApiKey(false); } return (
{/* Server-configured notice */} {isServerConfigured && (
{t('settings.serverConfiguredNotice')}
)} {/* API Key + Base URL Configuration */} {(provider.requiresApiKey || isServerConfigured) && ( <>
setWebSearchProviderConfig(selectedProviderId, { apiKey: e.target.value, }) } className="font-mono text-sm pr-10" />

{t('settings.webSearchApiKeyHint')}

setWebSearchProviderConfig(selectedProviderId, { baseUrl: e.target.value, }) } className="text-sm" />
{/* Request URL Preview */} {(() => { const effectiveBaseUrl = webSearchProvidersConfig[selectedProviderId]?.baseUrl || provider.defaultBaseUrl || ''; if (!effectiveBaseUrl) return null; const fullUrl = effectiveBaseUrl + '/search'; return (

{t('settings.requestUrl')}: {fullUrl}

); })()} )}
); }