"use client" import { useState, useEffect, useRef } from "react" import { Card } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Building2, Trophy, User, Search, Medal, Crown, Star, TrendingUp, Award, Sparkles, Zap, Shield } from "lucide-react" import Link from "next/link" interface Particle { x: number y: number vx: number vy: number size: number opacity: number color: string } export default function ProgressPage() { const [searchQuery, setSearchQuery] = useState("") const [particles, setParticles] = useState([]) const [mousePos, setMousePos] = useState({ x: 0, y: 0 }) const canvasRef = useRef(null) // Mock data для рейтингов const cityLeaderboard = [ { rank: 1, name: "Moscow", points: 12450, growth: "+320" }, { rank: 2, name: "Kazan", points: 8920, growth: "+180" }, { rank: 3, name: "SPB", points: 7185, growth: "+150" }, { rank: 4, name: "Novosibirsk", points: 5670, growth: "+95" }, { rank: 5, name: "Ekaterinburg", points: 4320, growth: "+70" } ] const playerLeaderboard = [ { rank: 1, name: "cyber_god", points: 2840, level: 12, streak: 15 }, { rank: 2, name: "h4ck3r_pro", points: 2650, level: 11, streak: 12 }, { rank: 3, name: "matrix_neo", points: 2420, level: 10, streak: 8 }, { rank: 4, name: "data_wizard", points: 2180, level: 9, streak: 6 }, { rank: 5, name: "code_ninja", points: 1950, level: 8, streak: 5 } ] const kazanLeaderboard = [ { rank: 1, name: "pennytige", points: 1337, level: 5, isYou: true }, { rank: 2, name: "kzn_hacker", points: 1280, level: 6, isYou: false }, { rank: 3, name: "tatar_coder", points: 1150, level: 5, isYou: false }, { rank: 4, name: "crypto_bear", points: 980, level: 4, isYou: false }, { rank: 5, name: "byte_master", points: 875, level: 4, isYou: false } ] const allPlayers = [ { rank: 1, name: "cyber_god", level: 12, points: 2840, city: "Moscow", change: "up" }, { rank: 2, name: "h4ck3r_pro", level: 11, points: 2650, city: "SPB", change: "up" }, { rank: 3, name: "matrix_neo", level: 10, points: 2420, city: "Kazan", change: "same" }, { rank: 4, name: "data_wizard", level: 9, points: 2180, city: "Moscow", change: "down" }, { rank: 5, name: "code_ninja", level: 8, points: 1950, city: "Kazan", change: "up" }, { rank: 15, name: "pennytige", level: 5, points: 1337, city: "Kazan", change: "up", isYou: true } ] const filteredPlayers = allPlayers.filter(player => player.name.toLowerCase().includes(searchQuery.toLowerCase()) ) // Initialize particles useEffect(() => { const initParticles: Particle[] = [] const colors = ['#06b6d4', '#eab308', '#8b5cf6', '#3b82f6', '#10b981'] for (let i = 0; i < 70; i++) { initParticles.push({ x: Math.random() * (typeof window !== 'undefined' ? window.innerWidth : 1920), y: Math.random() * (typeof window !== 'undefined' ? window.innerHeight : 1080), vx: (Math.random() - 0.5) * 0.7, vy: (Math.random() - 0.5) * 0.7, size: Math.random() * 2.5 + 1, opacity: Math.random() * 0.5 + 0.2, color: colors[Math.floor(Math.random() * colors.length)] }) } setParticles(initParticles) }, []) // Animate particles useEffect(() => { const canvas = canvasRef.current if (!canvas) return const ctx = canvas.getContext('2d') if (!ctx) return const updateCanvasSize = () => { canvas.width = window.innerWidth canvas.height = window.innerHeight } updateCanvasSize() let animationFrameId: number const animate = () => { ctx.clearRect(0, 0, canvas.width, canvas.height) setParticles(prevParticles => { return prevParticles.map(particle => { let newX = particle.x + particle.vx let newY = particle.y + particle.vy if (newX < 0 || newX > canvas.width) particle.vx *= -1 if (newY < 0 || newY > canvas.height) particle.vy *= -1 newX = Math.max(0, Math.min(canvas.width, newX)) newY = Math.max(0, Math.min(canvas.height, newY)) ctx.shadowBlur = 10 ctx.shadowColor = particle.color ctx.fillStyle = `${particle.color}${Math.floor(particle.opacity * 255).toString(16).padStart(2, '0')}` ctx.beginPath() ctx.arc(newX, newY, particle.size, 0, Math.PI * 2) ctx.fill() return { ...particle, x: newX, y: newY } }) }) animationFrameId = requestAnimationFrame(animate) } animate() window.addEventListener('resize', updateCanvasSize) return () => { cancelAnimationFrame(animationFrameId) window.removeEventListener('resize', updateCanvasSize) } }, []) // Mouse parallax useEffect(() => { const handleMouseMove = (e: MouseEvent) => { setMousePos({ x: e.clientX, y: e.clientY }) } window.addEventListener('mousemove', handleMouseMove) return () => window.removeEventListener('mousemove', handleMouseMove) }, []) const getRankColor = (rank: number) => { if (rank === 1) return "text-yellow-400" if (rank === 2) return "text-gray-300" if (rank === 3) return "text-amber-600" return "text-cyan-400" } const getRankIcon = (rank: number) => { if (rank === 1) return if (rank === 2) return if (rank === 3) return return null } const getRankBg = (rank: number) => { if (rank === 1) return "bg-gradient-to-br from-yellow-500/20 to-orange-500/20 border-yellow-500/40" if (rank === 2) return "bg-gradient-to-br from-gray-400/20 to-gray-500/20 border-gray-400/40" if (rank === 3) return "bg-gradient-to-br from-amber-600/20 to-orange-700/20 border-amber-600/40" return "bg-cyan-500/5 border-cyan-500/20" } return (
{/* Animated particles canvas */} {/* Animated background effects */}
{/* Header */}
{/* Main Content */}
{/* Page Title */}

Leaderboards

Соревнуйся с лучшими хакерами!

{/* Top Leaderboards */}
{/* Топ городов */}
{/* Animated background pattern */}

Топ городов

City Rankings

{cityLeaderboard.map((entry, index) => (
{getRankIcon(entry.rank)} #{entry.rank}
{entry.name}
{entry.points.toLocaleString()} {entry.growth}
))}
{/* Топ игроков */}
{/* Animated background pattern */}

Топ игроков

Global Rankings

{playerLeaderboard.map((entry, index) => (
{getRankIcon(entry.rank)} #{entry.rank}
{entry.name}
Lvl {entry.level} {entry.streak}
{entry.points.toLocaleString()}
))}
{/* Топ Kazan */}
{/* Animated background pattern */}

Топ Kazan

Local Rankings

{kazanLeaderboard.map((entry, index) => (
{getRankIcon(entry.rank)} #{entry.rank}
{entry.name} {entry.isYou && ( YOU )}
{entry.points.toLocaleString()}
))}
{/* All Players Table */}

Все игроки

Complete Rankings

{allPlayers.length} игроков
{/* Search */}
setSearchQuery(e.target.value)} className="pl-12 bg-[#0a0e1a]/80 backdrop-blur border-cyan-500/40 text-cyan-400 placeholder:text-cyan-400/30 font-mono hover:border-cyan-500/60 transition-all focus:border-cyan-400 focus:shadow-[0_0_20px_rgba(6,182,212,0.2)] cursor-text h-12 rounded-xl" />
{/* Table */}
{filteredPlayers.map((player, index) => ( ))}
Ранг Игрок Уровень Очки Город Тренд
{getRankIcon(player.rank)} #{player.rank}
{player.name} {player.isYou && ( YOU )}
{player.level}
{player.points.toLocaleString()} {player.city}
{player.change === 'up' && } {player.change === 'down' && } {player.change === 'same' && }
{filteredPlayers.length === 0 && (

Игрок не найден

Попробуйте другой запрос

)}
{/* Enhanced Background grid */}
) }