import { useState, useEffect } from 'react'; import { createPortal } from 'react-dom'; import { X, Save, Plus } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { ProxyEntry } from '../../../types/config'; import { generateUUID } from '../../../utils/uuid'; interface ProxyEditModalProps { isOpen: boolean; onClose: () => void; onSave: (entry: ProxyEntry) => void; initialData?: ProxyEntry; isEditing: boolean; } export default function ProxyEditModal({ isOpen, onClose, onSave, initialData, isEditing }: ProxyEditModalProps) { const { t } = useTranslation(); const [formData, setFormData] = useState({ id: generateUUID(), name: '', url: '', priority: 0, enabled: true, tags: [], auth: { username: '', password: '' }, max_accounts: 0, is_healthy: true, health_check_url: '' }); const [tagInput, setTagInput] = useState(''); useEffect(() => { if (isOpen) { if (isEditing && initialData) { setFormData(JSON.parse(JSON.stringify(initialData))); } else { setFormData({ id: generateUUID(), name: '', url: '', priority: 0, enabled: true, tags: [], auth: { username: '', password: '' }, max_accounts: 0, is_healthy: true, health_check_url: '' }); } } }, [isOpen, initialData, isEditing]); const handleSave = () => { if (!formData.name || !formData.url) { // Basic validation return; } // Clean up auth if empty const entryToSave = { ...formData }; if (!entryToSave.auth?.username && !entryToSave.auth?.password) { entryToSave.auth = undefined; } onSave(entryToSave); onClose(); }; const addTag = () => { if (tagInput.trim() && !formData.tags.includes(tagInput.trim())) { setFormData(prev => ({ ...prev, tags: [...prev.tags, tagInput.trim()] })); setTagInput(''); } }; const removeTag = (tag: string) => { setFormData(prev => ({ ...prev, tags: prev.tags.filter(t => t !== tag) })); }; if (!isOpen) return null; return createPortal(

{isEditing ? t('settings.proxy_pool.edit_proxy', 'Edit Proxy') : t('settings.proxy_pool.add_proxy', 'Add Proxy')}

{/* Basic Info */}
setFormData({ ...formData, name: e.target.value })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500" placeholder={t('settings.proxy_pool.name', 'Name')} />
setFormData({ ...formData, url: e.target.value })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500" placeholder="http://127.0.0.1:7890" />
{/* Auth */}
setFormData({ ...formData, auth: { ...formData.auth!, username: e.target.value } })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" />
setFormData({ ...formData, auth: { ...formData.auth!, password: e.target.value } })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" />
{/* Advanced */}
setFormData({ ...formData, priority: parseInt(e.target.value) || 0 })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" />
setFormData({ ...formData, max_accounts: parseInt(e.target.value) || 0 })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" />
setFormData({ ...formData, health_check_url: e.target.value })} className="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" placeholder="https://www.google.com" />
{/* Tags */}
setTagInput(e.target.value)} onKeyDown={e => e.key === 'Enter' && addTag()} className="flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-white" placeholder={t('settings.proxy_pool.add_tag_placeholder', 'Add tag...')} />
{formData.tags.map(tag => ( {tag} ))}
, document.body ); }