import React from 'react';
import { useParams, Link as RouterLink } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { getPlayer } from '../services/public';
import { assetUrl } from '../utils/url';
import { Box, Badge, Button, Container, Divider, Heading, HStack, Image, SimpleGrid, Skeleton, Stack, Text, VStack, useColorModeValue } from '@chakra-ui/react';
import MainLayout from '../components/layout/MainLayout';
import NewsletterCTA from '../components/common/NewsletterCTA';
import { translateNationality, getCountryFlag } from '../utils/nationality';
const PlayerDetailPage: React.FC = () => {
const { id } = useParams<{ id: string }>();
const { data, isLoading, isError } = useQuery({ queryKey: ['player', id], queryFn: () => getPlayer(String(id)) });
const cardBg = useColorModeValue('white', 'gray.800');
const borderColor = useColorModeValue('gray.200', 'gray.700');
if (isLoading) {
return (
);
}
if (isError || !data) {
return (
Hráče se nepodařilo načíst.
);
}
const fullName = [data.first_name, data.last_name].filter(Boolean).join(' ');
return (
{fullName}
{typeof data.jersey_number === 'number' && (
#{data.jersey_number}
)}
{data.position && (
{data.position}
)}
{!data.is_active && (
Neaktivní
)}
Informace o hráči
{data.position && (
Pozice: {data.position}
)}
{typeof data.jersey_number === 'number' && (
Číslo dresu: #{data.jersey_number}
)}
{data.nationality && (
Národnost:
{getCountryFlag(data.nationality)}
{translateNationality(data.nationality)}
)}
{data.date_of_birth && (
Datum narození: {new Date(data.date_of_birth).toLocaleDateString('cs-CZ')} — {(() => { const a = calculateAge(data.date_of_birth); return a != null ? `${a} ${czYears(a)}` : '' })()}
)}
{data.team?.name ? (
Tým: {data.team.name}
) : (typeof data.team_id === 'number' && data.team_id > 0) ? (
Tým ID: {data.team_id}
) : null}
{(data.height || data.weight) && (
Výška/Váha: {data.height ? `${data.height} cm` : '-'} / {data.weight ? `${data.weight} kg` : '-'}
)}
{data.email && (
Email: {data.email}
)}
{data.phone && (
Telefon: {data.phone}
)}
);
};
function calculateAge(iso: string): number | null {
try {
const d = new Date(iso);
if (isNaN(d.getTime())) return null;
const today = new Date();
let age = today.getFullYear() - d.getFullYear();
const m = today.getMonth() - d.getMonth();
if (m < 0 || (m === 0 && today.getDate() < d.getDate())) age--;
return age;
} catch {
return null;
}
}
function czYears(n: number): string {
if (n === 1) return 'rok';
if (n >= 2 && n <= 4) return 'roky';
return 'let';
}
function normalizeTel(input: string): string {
if (!input) return '';
let s = String(input).trim();
s = s.replace(/[\s\-()]/g, '');
if (s.startsWith('00')) s = '+' + s.slice(2);
s = s.replace(/(?!^)[^\d]/g, '');
if (s[0] !== '+' && s.startsWith('+')) {
// keep + if present
}
return s;
}
export default PlayerDetailPage;