import React, { useState, useCallback, useRef, useEffect } from 'react'; import { type Service } from '../types'; import { generateServiceDescription } from '../services/geminiService'; import { Globe, Loader2 } from 'lucide-react'; interface AddServiceModalProps { onClose: () => void; onAddService: (service: Omit) => void; } const AddServiceModal: React.FC = ({ onClose, onAddService }) => { const [name, setName] = useState(''); const [url, setUrl] = useState(''); const [description, setDescription] = useState(''); const [isFetchingDesc, setIsFetchingDesc] = useState(false); const modalRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (modalRef.current && !modalRef.current.contains(event.target as Node)) { onClose(); } }; document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [onClose]); const handleFetchDescription = useCallback(async () => { if (name.trim().length > 2 && process.env.API_KEY) { setIsFetchingDesc(true); const desc = await generateServiceDescription(name); setDescription(desc); setIsFetchingDesc(false); } }, [name]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (name && url) { onAddService({ name, url, description: description || `A local service at ${url}`, icon: Globe, }); onClose(); } }; return (

Add a New Service

setName(e.target.value)} onBlur={handleFetchDescription} className="mt-1 block w-full bg-gray-900 border border-gray-600 rounded-md shadow-sm py-2 px-3 text-white focus:outline-none focus:ring-teal-500 focus:border-teal-500 sm:text-sm" placeholder="e.g., Home Assistant" required />
setUrl(e.target.value)} className="mt-1 block w-full bg-gray-900 border border-gray-600 rounded-md shadow-sm py-2 px-3 text-white focus:outline-none focus:ring-teal-500 focus:border-teal-500 sm:text-sm" placeholder="http://192.168.1.100:8123" required />