"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import useStore from "@/lib/store"; import modelAdapter from "@/lib/services/adapter-instance"; import { Save, Key, Server, Eye, EyeOff } from "lucide-react"; import { translations } from "@/lib/i18n/translations"; export default function SettingsPanel() { const { language, apiKeys, setApiKey, selectedProvider, setSelectedProvider, qwenTokens, setQwenTokens } = useStore(); const t = translations[language].settings; const common = translations[language].common; const [showApiKey, setShowApiKey] = useState>({}); const [isAuthLoading, setIsAuthLoading] = useState(false); const handleSave = () => { if (typeof window !== "undefined") { localStorage.setItem("promptarch-api-keys", JSON.stringify(apiKeys)); alert(t.keysSaved); } }; const handleLoad = () => { if (typeof window !== "undefined") { const saved = localStorage.getItem("promptarch-api-keys"); if (saved) { try { const keys = JSON.parse(saved); if (keys.qwen) { setApiKey("qwen", keys.qwen); modelAdapter.updateQwenApiKey(keys.qwen); } if (keys.ollama) { setApiKey("ollama", keys.ollama); modelAdapter.updateOllamaApiKey(keys.ollama); } if (keys.zai) { setApiKey("zai", keys.zai); modelAdapter.updateZaiApiKey(keys.zai); } } catch (e) { console.error("Failed to load API keys:", e); } } const storedTokens = modelAdapter.getQwenTokenInfo(); if (storedTokens) { setQwenTokens(storedTokens); } } }; const handleApiKeyChange = (provider: string, value: string) => { setApiKey(provider as "qwen" | "ollama" | "zai", value); switch (provider) { case "qwen": modelAdapter.updateQwenApiKey(value); break; case "ollama": modelAdapter.updateOllamaApiKey(value); break; case "zai": modelAdapter.updateZaiApiKey(value); break; } }; const handleQwenAuth = async () => { if (qwenTokens) { setQwenTokens(null); modelAdapter.updateQwenTokens(); modelAdapter.updateQwenApiKey(apiKeys.qwen || ""); return; } setIsAuthLoading(true); try { const token = await modelAdapter.startQwenOAuth(); setQwenTokens(token); modelAdapter.updateQwenTokens(token); } catch (error) { console.error("Qwen OAuth failed", error); window.alert( error instanceof Error ? error.message : t.qwenAuthFailed ); } finally { setIsAuthLoading(false); } }; useEffect(() => { handleLoad(); }, []); return (
{t.apiKeys} {t.apiKeysDesc}
handleApiKeyChange("qwen", e.target.value)} className="font-mono text-xs lg:text-sm pr-10" />

{t.getApiKey}{" "} Alibaba DashScope

{qwenTokens && (

✓ {t.authenticated} ({t.expires}: {new Date(qwenTokens.expiresAt || 0).toLocaleString()})

)}
handleApiKeyChange("ollama", e.target.value)} className="font-mono text-xs lg:text-sm pr-10" />

{t.getApiKey}{" "} ollama.com/cloud

handleApiKeyChange("zai", e.target.value)} className="font-mono text-xs lg:text-sm pr-10" />

{t.getApiKey}{" "} docs.z.ai

{t.defaultProvider} {t.defaultProviderDesc}
{(["qwen", "ollama", "zai"] as const).map((provider) => ( ))}
{t.dataPrivacy} {t.dataPrivacyTitleDesc}

{t.dataPrivacyDesc}

); }