import { useTranslation } from 'react-i18next' import { useState } from 'react' import Layout from '../components/Layout' import { useServers } from '../contexts/ServerContext' import '../App.css' // Loading Skeleton Component const LoadingSkeleton = ({ width = '60px', height = '40px', className = '', style = {} }: { width?: string, height?: string, className?: string, style?: React.CSSProperties }) => (
) function Servers() { const { t } = useTranslation() const { servers, loading } = useServers() const [selectedCategory, setSelectedCategory] = useState('All') // Filter servers by category const filteredServers = selectedCategory === 'All' ? servers : servers.filter(server => server.category === selectedCategory) const categories = ['All', ...Array.from(new Set(servers.map(s => s.category)))] const getStatusColor = (status: string) => { switch (status) { case 'online': return '#10b981' case 'offline': return '#ef4444' case 'loading': return '#f59e0b' default: return '#6b7280' } } return ( {/* Servers Page Header */}

{t('servers.title')}

{t('servers.subtitle')}

{/* Category Filter */}
{categories.map(category => ( ))}
{/* Servers Grid */}
{loading ? ( // Show loading skeletons servers.length > 0 ? servers.map((_, index) => (
{/* Status Indicator Skeleton */}
{/* Server Header Skeleton */}
{/* Server Stats Skeleton */}
{/* Server Details Skeleton */}
{/* Join Button Skeleton */}
)) : [] ) : ( filteredServers.map((server) => (
{ e.currentTarget.style.transform = 'translateY(-5px)' e.currentTarget.style.boxShadow = '0 10px 25px rgba(0,0,0,0.2)' }} onMouseLeave={(e) => { e.currentTarget.style.transform = 'translateY(0)' e.currentTarget.style.boxShadow = 'none' }} > {/* Status Indicator */}
{/* Server Header */}

{server.name}

🗺️ {server.mapName || 'Loading...'} {server.category}
{/* Server Stats */}
{t('servers.players')}
{server.status === 'online' ? server.playerCount : 'Loading...'}
{t('servers.status')}
{server.status === 'online' ? 'Online' : server.status === 'offline' ? 'Offline' : 'Loading'}
{/* Server Details */}
� {server.ip}:{server.port} {server.category}
{/* Join Button */}
)) )}
{/* Server Stats Summary */}

{t('servers.serverStats')}

{servers.filter(s => s.status === 'online').length}
{t('servers.onlineServers')}
{servers.reduce((sum, s) => sum + (s.status === 'online' ? s.playerCount : 0), 0)}
{t('servers.totalPlayers')}
{Array.from(new Set(servers.map(s => s.category))).length}
{t('servers.categories')}
{servers.length}
{t('servers.totalServers')}
) } export default Servers