import React, { useState, useEffect } from "react"; import { Button } from "@/components/ui/button.tsx"; import { Input } from "@/components/ui/input.tsx"; import { Label } from "@/components/ui/label.tsx"; import { Alert, AlertTitle, AlertDescription } from "@/components/ui/alert.tsx"; import { useTranslation } from "react-i18next"; import { getServerConfig, saveServerConfig, testServerConnection, type ServerConfig, } from "@/ui/main-axios.ts"; import { CheckCircle, XCircle, Server, Wifi } from "lucide-react"; interface ServerConfigProps { onServerConfigured: (serverUrl: string) => void; onCancel?: () => void; isFirstTime?: boolean; } export function ElectronServerConfig({ onServerConfigured, onCancel, isFirstTime = false, }: ServerConfigProps) { const { t } = useTranslation(); const [serverUrl, setServerUrl] = useState(""); const [loading, setLoading] = useState(false); const [testing, setTesting] = useState(false); const [error, setError] = useState(null); const [connectionStatus, setConnectionStatus] = useState< "unknown" | "success" | "error" >("unknown"); useEffect(() => { loadServerConfig(); }, []); const loadServerConfig = async () => { try { const config = await getServerConfig(); if (config?.serverUrl) { setServerUrl(config.serverUrl); setConnectionStatus("success"); } } catch { // Ignore config loading errors } }; const handleTestConnection = async () => { if (!serverUrl.trim()) { setError(t("serverConfig.enterServerUrl")); return; } setTesting(true); setError(null); try { let normalizedUrl = serverUrl.trim(); if ( !normalizedUrl.startsWith("http://") && !normalizedUrl.startsWith("https://") ) { normalizedUrl = `http://${normalizedUrl}`; } const result = await testServerConnection(normalizedUrl); if (result.success) { setConnectionStatus("success"); } else { setConnectionStatus("error"); setError(result.error || t("serverConfig.connectionFailed")); } } catch { setConnectionStatus("error"); setError(t("serverConfig.connectionError")); } finally { setTesting(false); } }; const handleSaveConfig = async () => { if (!serverUrl.trim()) { setError(t("serverConfig.enterServerUrl")); return; } if (connectionStatus !== "success") { setError(t("serverConfig.testConnectionFirst")); return; } setLoading(true); setError(null); try { let normalizedUrl = serverUrl.trim(); if ( !normalizedUrl.startsWith("http://") && !normalizedUrl.startsWith("https://") ) { normalizedUrl = `http://${normalizedUrl}`; } const config: ServerConfig = { serverUrl: normalizedUrl, lastUpdated: new Date().toISOString(), }; const success = await saveServerConfig(config); if (success) { onServerConfigured(normalizedUrl); } else { setError(t("serverConfig.saveFailed")); } } catch { setError(t("serverConfig.saveError")); } finally { setLoading(false); } }; const handleUrlChange = (value: string) => { setServerUrl(value); setConnectionStatus("unknown"); setError(null); }; return (

{t("serverConfig.title")}

{t("serverConfig.description")}

handleUrlChange(e.target.value)} className="flex-1 h-10" disabled={loading} />
{connectionStatus !== "unknown" && (
{connectionStatus === "success" ? ( <> {t("serverConfig.connected")} ) : ( <> {t("serverConfig.disconnected")} )}
)} {error && ( {t("common.error")} {error} )}
{onCancel && !isFirstTime && ( )}
{t("serverConfig.helpText")}
); }