'use client' import { useState, useEffect } from 'react' import { getAISettings, updateAISettings } from '@/app/actions/ai-settings' import { getSystemConfig } from '@/lib/config' import { Switch } from '@/components/ui/switch' import { Badge } from '@/components/ui/badge' import { Zap, TrendingUp, Activity, Settings, Brain, Tag, Globe, Sparkles } from 'lucide-react' import { AdminMetrics } from '@/components/admin-metrics' import Link from 'next/link' import { Button } from '@/components/ui/button' import { toast } from 'sonner' import { useLanguage } from '@/lib/i18n' interface FeatureState { titleSuggestions: boolean semanticSearch: boolean paragraphRefactor: boolean memoryEcho: boolean languageDetection: boolean autoLabeling: boolean } interface ProviderInfo { name: string status: string } export function AdminAIPageClient({ initialFeatures, providers, }: { initialFeatures: FeatureState providers: ProviderInfo[] }) { const [features, setFeatures] = useState(initialFeatures) const [saving, setSaving] = useState(null) const { t } = useLanguage() const handleToggle = async (key: keyof FeatureState, value: boolean) => { setSaving(key) setFeatures(prev => ({ ...prev, [key]: value })) try { await updateAISettings({ [key]: value }) toast.success(t('admin.ai.settingUpdated')) } catch { toast.error(t('admin.ai.updateFailedShort')) setFeatures(prev => ({ ...prev, [key]: !value })) } finally { setSaving(null) } } const featureList = [ { key: 'titleSuggestions' as const, label: t('admin.ai.titleSuggestions'), description: t('admin.ai.titleSuggestionsDesc'), icon: , }, { key: 'paragraphRefactor' as const, label: t('admin.ai.aiAssistant'), description: t('admin.ai.aiAssistantDesc'), icon: , }, { key: 'memoryEcho' as const, label: t('admin.ai.memoryEchoFeature'), description: t('admin.ai.memoryEchoFeatureDesc'), icon: , }, { key: 'languageDetection' as const, label: t('admin.ai.languageDetection'), description: t('admin.ai.languageDetectionDesc'), icon: , }, { key: 'autoLabeling' as const, label: t('admin.ai.autoLabeling'), description: t('admin.ai.autoLabelingDesc'), icon: , }, ] const aiMetrics = [ { title: t('admin.ai.activeFeatures'), value: String(Object.values(features).filter(Boolean).length) + ' / ' + featureList.length, trend: { value: 0, isPositive: true }, icon: , }, { title: t('admin.ai.successRate'), value: '100%', trend: { value: 0, isPositive: true }, icon: , }, { title: t('admin.ai.avgResponseTime'), value: '—', trend: { value: 0, isPositive: true }, icon: , }, { title: t('admin.ai.configuredProviders'), value: String(providers.filter(p => p.status !== 'Not Configured').length), icon: , }, ] return (

{t('admin.ai.pageTitle')}

{t('admin.ai.pageDescription')}

{/* Feature Toggles */}

{t('admin.ai.features')}

{featureList.map(({ key, label, description, icon }) => (
{icon}

{label}

{description}

handleToggle(key, v)} disabled={saving === key} className="ml-3 flex-shrink-0" />
))}
{/* AI Provider Status */}

{t('admin.ai.providerStatus')}

{providers.map((provider) => (

{provider.name}

{provider.status}
))}

{t('admin.ai.recentRequests')}

{t('admin.ai.comingSoon')}

) }