"use client"; import { useState } from "react"; import { startStream } from "../lib/api"; interface AddCameraModalProps { open: boolean; onClose: () => void; onAdded: () => void; } export default function AddCameraModal({ open, onClose, onAdded }: AddCameraModalProps) { const [cameraId, setCameraId] = useState(""); const [rtspUrl, setRtspUrl] = useState(""); const [fps, setFps] = useState("2.0"); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); if (!open) return null; async function handleSubmit() { if (!cameraId.trim() || !rtspUrl.trim()) { setError("Camera ID and RTSP URL are required"); return; } setLoading(true); setError(null); try { await startStream(cameraId.trim(), rtspUrl.trim(), parseFloat(fps)); setCameraId(""); setRtspUrl(""); onAdded(); onClose(); } catch (e) { setError(e instanceof Error ? e.message : "Failed to start stream"); } finally { setLoading(false); } } return (

Add Camera

setCameraId(e.target.value)} placeholder="e.g. lobby-cam-01" className="w-full bg-[var(--background)] border border-[var(--border)] rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-[var(--accent)]/50" />
setRtspUrl(e.target.value)} placeholder="rtsp://user:pass@192.168.1.100:554/stream" className="w-full bg-[var(--background)] border border-[var(--border)] rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-[var(--accent)]/50" />
setFps(e.target.value)} min="0.1" max="30" step="0.5" className="w-full bg-[var(--background)] border border-[var(--border)] rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-[var(--accent)]/50" />
{error &&

{error}

}
); }