import { Loader2, Check, X, CircleHelp } from 'lucide-react' import { useEffect, useState } from 'react' import { type RemoteServer, testCustomRemoteServerConnection } from '../api/remoteServers' interface Props { server?: RemoteServer onSubmit: (data: Partial) => Promise onCancel: () => void } export default function RemoteServerForm({ server, onSubmit, onCancel }: Props) { const [formData, setFormData] = useState({ name: server?.name || '', provider: server?.provider || 'generic', host: server?.host || '', port: server?.port ?? 22, username: server?.username || '', enabled: server?.enabled ?? true, }) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [testStatus, setTestStatus] = useState<'idle' | 'testing' | 'success' | 'error'>('idle') useEffect(() => { setFormData({ name: server?.name || '', provider: server?.provider || 'generic', host: server?.host || '', port: server?.port ?? 22, username: server?.username || '', enabled: server?.enabled ?? true, }) }, [server]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) setError(null) try { await onSubmit(formData) } catch (err) { setError(err instanceof Error ? err.message : 'Failed to save server') } finally { setLoading(false) } } const handleTestConnection = async () => { if (!formData.host || !formData.port) return setTestStatus('testing') setError(null) try { const result = await testCustomRemoteServerConnection(formData.host, formData.port) if (result.reachable) { setTestStatus('success') setTimeout(() => setTestStatus('idle'), 3000) } else { setTestStatus('error') setError(`Connection failed: ${result.error || 'Unknown error'}`) } } catch { setTestStatus('error') setError('Connection failed') } } return ( <> {/* Layer 1: Background overlay (z-40) */}
{/* Layer 2: Form container (z-50, pointer-events-none) */}
{/* Layer 3: Form content (pointer-events-auto) */}

{server ? 'Edit Remote Server' : 'Add Remote Server'}

{error && (
{error}
)}
setFormData({ ...formData, name: e.target.value })} placeholder="My Production Server" className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
setFormData({ ...formData, host: e.target.value })} placeholder="192.168.1.100" className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
{ const v = parseInt(e.target.value) setFormData({ ...formData, port: Number.isNaN(v) ? 0 : v }) }} className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
{formData.provider !== 'docker' && (
setFormData({ ...formData, username: e.target.value })} className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
)}
) }