import { Box, Container, HStack, Link, Text, Stack, Wrap, WrapItem, Button, Image, VStack, IconButton, SimpleGrid, Heading } from '@chakra-ui/react'; import React, { useEffect, useState } from 'react'; import { FiArrowUpRight, FiMail } from 'react-icons/fi'; import { FaFacebook, FaInstagram, FaYoutube } from 'react-icons/fa'; import { trackNavigation } from '../../utils/umami'; import { useClubTheme } from '../../contexts/ClubThemeContext'; import { usePublicSettings } from '../../hooks/usePublicSettings'; import { assetUrl } from '../../utils/url'; import { API_URL } from '../../services/api'; const resolveBackendUrl = (path: string) => { try { if (/^https?:\/\//i.test(path)) return path; if (path.startsWith('/cache') || path.startsWith('/uploads')) { const origin = new URL(API_URL, typeof window !== 'undefined' ? window.location.origin : 'http://localhost:3000').origin; return new URL(path, origin).toString(); } return path; } catch { return path; } }; interface Sponsor { id: number | string; name: string; logo_url?: string; website_url?: string; is_active?: boolean; } const Footer: React.FC = () => { const currentYear = new Date().getFullYear(); const [clubName, setClubName] = useState('Fotbal Club'); const [shopUrl, setShopUrl] = useState(null); const [sponsors, setSponsors] = useState([]); const theme = useClubTheme(); const { data: settings } = usePublicSettings(); useEffect(() => { let cancelled = false; (async () => { try { const res = await fetch(resolveBackendUrl('/cache/prefetch/facr_club_info.json'), { cache: 'no-cache' }); if (!res.ok) return; const json = await res.json(); if (cancelled) return; if (json?.name) setClubName(String(json.name)); } catch {} try { const res = await fetch(resolveBackendUrl('/cache/prefetch/settings.json'), { cache: 'no-cache' }); if (res?.ok) { const s = await res.json(); if (!cancelled && s) { setShopUrl(s?.shop_url || s?.eshop_url || null); } } } catch {} // Fetch sponsors try { const sponsorsRes = await fetch(`${API_URL}/sponsors`); if (sponsorsRes.ok) { const data = await sponsorsRes.json(); if (!cancelled && Array.isArray(data)) { // Filter active sponsors only const activeSponsors = data.filter((s: Sponsor) => s.is_active !== false); setSponsors(activeSponsors); } } } catch {} })(); return () => { cancelled = true; }; }, []); return ( <> {/* Navigation Footer */} {/* Brand */} {clubName} {/* Navigation links */} Články Zápasy Tabulka Sponzoři Kontakt Cookies Obchodní podmínky Zásady ochrany osobních údajů {shopUrl && ( E‑shop )} {/* Sponsors Section */} {sponsors.length > 0 && ( Naši partneři {sponsors.map((sponsor) => ( trackNavigation('footer', `sponsor_${sponsor.name}`)} > {sponsor.name} ))} )} {/* Social Media Section */} {(settings?.facebook_url || settings?.instagram_url || settings?.youtube_url) && ( Sledujte nás {settings?.facebook_url && ( } size="lg" colorScheme="facebook" variant="ghost" color="white" _hover={{ bg: 'whiteAlpha.200', transform: 'translateY(-2px)', color: '#1877F2' }} transition="all 0.2s" onClick={() => trackNavigation('footer', 'social_facebook')} /> )} {settings?.instagram_url && ( } size="lg" variant="ghost" color="white" _hover={{ bg: 'whiteAlpha.200', transform: 'translateY(-2px)', color: '#E4405F' }} transition="all 0.2s" onClick={() => trackNavigation('footer', 'social_instagram')} /> )} {settings?.youtube_url && ( } size="lg" variant="ghost" color="white" _hover={{ bg: 'whiteAlpha.200', transform: 'translateY(-2px)', color: '#FF0000' }} transition="all 0.2s" onClick={() => trackNavigation('footer', 'social_youtube')} /> )} )} {/* Copyright Bar */} © {currentYear} {clubName}. Všechna práva vyhrazena. {/* MyClub Watermark - Clean White Branding */} {/* Left: MyClub Logo & Text */} MyClub Stránku provozuje MyClub Profesionální webové stránky pro sportovní kluby {/* Right: CTA Buttons */} ); }; export default Footer;