import { useState, useEffect } from 'react' import { useParams, useNavigate, Link } from 'react-router-dom' import { marathonsApi } from '@/api' import type { Marathon } from '@/types' import { Button, Card, CardContent } from '@/components/ui' import { useAuthStore } from '@/store/auth' import { Users, Calendar, Trophy, Play, Settings, Copy, Check, Loader2 } from 'lucide-react' import { format } from 'date-fns' export function MarathonPage() { const { id } = useParams<{ id: string }>() const navigate = useNavigate() const user = useAuthStore((state) => state.user) const [marathon, setMarathon] = useState(null) const [isLoading, setIsLoading] = useState(true) const [copied, setCopied] = useState(false) useEffect(() => { loadMarathon() }, [id]) const loadMarathon = async () => { if (!id) return try { const data = await marathonsApi.get(parseInt(id)) setMarathon(data) } catch (error) { console.error('Failed to load marathon:', error) navigate('/marathons') } finally { setIsLoading(false) } } const copyInviteCode = () => { if (marathon) { navigator.clipboard.writeText(marathon.invite_code) setCopied(true) setTimeout(() => setCopied(false), 2000) } } if (isLoading || !marathon) { return (
) } const isOrganizer = user?.id === marathon.organizer.id const isParticipant = !!marathon.my_participation return (
{/* Header */}

{marathon.title}

{marathon.description && (

{marathon.description}

)}
{marathon.status === 'preparing' && isOrganizer && ( )} {marathon.status === 'active' && isParticipant && ( )}
{/* Stats */}
{marathon.participants_count}
Участников
{marathon.games_count}
Игр
{marathon.start_date ? format(new Date(marathon.start_date), 'd MMM') : '-'}
Дата начала
{marathon.status === 'active' ? 'Активен' : marathon.status === 'preparing' ? 'Подготовка' : 'Завершён'}
Статус
{/* Invite code */} {marathon.status !== 'finished' && (

Код приглашения

{marathon.invite_code}

Поделитесь этим кодом с друзьями, чтобы они могли присоединиться к марафону

)} {/* My stats */} {marathon.my_participation && (

Ваша статистика

{marathon.my_participation.total_points}
Очков
{marathon.my_participation.current_streak}
Серия
{marathon.my_participation.drop_count}
Пропусков
)}
) }