import { useState, useEffect } from 'react'; import { X, Wifi, Lock, Signal } from 'lucide-react'; import { motion, AnimatePresence } from 'motion/react'; import { toast } from 'sonner'; interface WiFiNetwork { ssid: string; signal: number; secured: boolean; } interface WiFiScanOverlayProps { onClose: () => void; onNetworkAdded: (ssid: string, passphrase: string) => void; existingNetworks: string[]; } export default function WiFiScanOverlay({ onClose, onNetworkAdded, existingNetworks }: WiFiScanOverlayProps) { const [isScanning, setIsScanning] = useState(true); const [networks, setNetworks] = useState([]); const [selectedNetwork, setSelectedNetwork] = useState(null); const [password, setPassword] = useState(''); const [isConnecting, setIsConnecting] = useState(false); useEffect(() => { // Simulate network scan const scanNetworks = async () => { await new Promise(resolve => setTimeout(resolve, 2000)); const mockNetworks: WiFiNetwork[] = [ { ssid: 'HomeNetwork-5G', signal: 95, secured: true }, { ssid: 'CoffeeShop_WiFi', signal: 88, secured: false }, { ssid: 'Neighbor-WiFi', signal: 72, secured: true }, { ssid: 'Office-Guest', signal: 65, secured: false }, { ssid: 'Mobile_Hotspot', signal: 58, secured: true }, { ssid: 'Library_Public', signal: 45, secured: false }, { ssid: 'Hidden-Network', signal: 30, secured: true } ].filter(net => !existingNetworks.includes(net.ssid)); setNetworks(mockNetworks); setIsScanning(false); }; scanNetworks(); }, [existingNetworks]); const handleConnect = async () => { if (!selectedNetwork) return; if (selectedNetwork.secured && !password) { toast.error('Password required for secured network'); return; } setIsConnecting(true); toast.loading('Connecting to network...'); // Simulate connection await new Promise(resolve => setTimeout(resolve, 1500)); toast.dismiss(); toast.success(`Connected to ${selectedNetwork.ssid}`); onNetworkAdded(selectedNetwork.ssid, password); onClose(); }; const getSignalIcon = (signal: number) => { if (signal > 80) return 'text-green-600'; if (signal > 60) return 'text-yellow-600'; return 'text-red-600'; }; const getSignalBars = (signal: number) => { const bars = Math.ceil(signal / 25); return (
{[1, 2, 3, 4].map((bar) => (
))}
); }; return ( e.stopPropagation()} >

WiFi Networks

{isScanning ? (
Scanning for networks...
Please wait
) : selectedNetwork ? (
{getSignalBars(selectedNetwork.signal)}
{selectedNetwork.ssid}
Signal: {selectedNetwork.signal}%
{selectedNetwork.secured && ( )}
{selectedNetwork.secured && (
setPassword(e.target.value)} placeholder="Enter network password" className="w-full px-3 py-2 border border-neutral-300 rounded-lg" autoFocus />
)}
) : (
{networks.length} network{networks.length !== 1 ? 's' : ''} found
{networks.map((network, index) => ( ))}
{networks.length === 0 && (
No new networks found
)}
)} ); }