'use client'; import { useEffect, useState } from 'react'; import { Zap, CheckCircle2, Lock, Loader2, Globe, Brain } from 'lucide-react'; import { API_BASE } from '@/lib/config'; import { useI18n } from '@/lib/i18n'; const FALLBACK_PROVIDERS_FACTORY = (t: (k: string) => string) => [ { id: "google", label: t('services.fallback.google.label'), description: t('services.fallback.google.desc'), mode: "classic" as const }, ]; interface AvailableProvider { id: string; label: string; description: string; mode: "classic" | "llm"; model?: string; } export default function TranslationServicesPage() { const { t } = useI18n(); const FALLBACK_PROVIDERS = FALLBACK_PROVIDERS_FACTORY(t); const [providers, setProviders] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const fetchProviders = async () => { try { const token = localStorage.getItem("token"); const headers: Record = {}; if (token) headers["Authorization"] = `Bearer ${token}`; const res = await fetch(`${API_BASE}/api/v1/providers/available`, { headers }); if (res.ok) { const data = await res.json(); const list = data.providers || []; setProviders(list.length > 0 ? list : FALLBACK_PROVIDERS); } else { setProviders(FALLBACK_PROVIDERS); } } catch { setProviders(FALLBACK_PROVIDERS); } finally { setIsLoading(false); } }; fetchProviders(); }, [FALLBACK_PROVIDERS]); const classicProviders = providers.filter((p) => p.mode === "classic"); const llmProviders = providers.filter((p) => p.mode === "llm"); return (
{/* ── Editorial Header ───────────────────────────────────── */}
{t('services.title')}

{t('services.title')}

{t('services.subtitle')}

{isLoading ? (

{t('services.loading')}

) : providers.length === 0 ? (

{t('services.noProviders')}

) : (
{/* Classic providers */} {classicProviders.length > 0 && (

{t('services.classic')}

{classicProviders.map((p) => (

{p.label}

{p.description}

{t('services.available')}
))}
)} {/* LLM providers */} {llmProviders.length > 0 && (

{t('services.llmPro')}

{llmProviders.map((p) => (

{p.label}

{p.description}

{p.model && (

{t('services.model')}: {p.model}

)}
{t('services.available')}
))}
)}
)} {/* Admin notice */}

{t('services.adminOnly.title')}

{t('services.adminOnly.desc')}

); }