# Countdown Timer Implementation

## Summary
Countdown timers have been implemented for upcoming matches across all match displays in the application. When a match has not yet started, the system displays a live countdown showing the time remaining until kickoff.

## Implementation Details

### 1. Match Modal (`MatchModal.tsx`)
**Status:** ✅ Already Implemented

The match modal shows:
- **For upcoming matches:** Countdown timer displaying "Začátek za [countdown]"
- **For ongoing matches:** Shows "—:—" with "Probíhá" status
- **For finished matches:** Shows the final score with "Skončeno" status

The countdown updates every second (1000ms) using the `useCountdown` hook.

### 2. Calendar Page (`CalendarPage.tsx`)
**Status:** ✅ Already Implemented

Countdowns appear in three places:

#### Calendar Grid View
- Each upcoming match displays an orange badge: "za [countdown]"
- Updates every 30 seconds for performance optimization
- Shows team logos alongside the countdown

#### List View
- Upcoming matches show countdown badge in orange
- Displays "za [countdown]" prominently
- Updates every 30 seconds

#### Calendar Modal
- When clicking a match, the modal shows countdown if the match hasn't started
- Updates every second for precision
- Format: "za [countdown]" in an orange badge

### 3. Matches Page (`MatchesPage.tsx`)
**Status:** ✅ **NEWLY ADDED**

Enhanced match cards to show countdown timers:
- **Upcoming matches with countdown:** Displays "Začátek za" with the countdown in orange (#f97316)
- **Upcoming matches without countdown:** Shows "Nadcházející" status
- **Finished matches:** Shows the score and "Skončeno" status
- Updates every 30 seconds using `useMultipleCountdowns` hook

### 4. Home Page (`HomePage.tsx`)
**Status:** ✅ Already Implemented

The homepage shows countdowns in multiple sections:
- **Next Match Widget:** Shows countdown for the next upcoming match
- **Match Ticker:** Displays countdown in various style modes (unified, magazine, pro, edge)
- Updates every second (1000ms) for real-time accuracy

## Countdown Display Format

The countdown automatically adjusts based on time remaining:

- **Days remaining:** `Xd Yh` (e.g., "2d 5h")
- **Hours remaining:** `Xh Ym` (e.g., "5h 30m")
- **Minutes remaining:** `Xm Ys` (e.g., "45m 12s")
- **Seconds remaining:** `Xs` (e.g., "30s")

## Technical Details

### Hooks Used

1. **`useCountdown(targetDate, updateInterval)`**
   - Used for single match countdowns
   - Updates at specified interval (typically 1000ms for modals)
   - Returns: `{ countdownString, timeRemaining, isActive, targetTime }`

2. **`useMultipleCountdowns(matches, updateInterval)`**
   - Used for tracking multiple matches simultaneously
   - Optimized for performance with longer intervals (30000ms)
   - Returns: Object mapping match IDs to countdown strings

### Performance Optimization

- **Calendar/Matches pages:** Update every 30 seconds to minimize re-renders
- **Modals/Homepage:** Update every second for precision when viewing specific matches
- Countdowns automatically stop when time reaches zero

## User Experience

When a match has not happened yet, users will see:

1. **In Match Cards/Calendar:** Orange countdown badge showing time until kickoff
2. **In Modal:** Prominent countdown display with "Začátek za" label
3. **On Homepage:** Real-time countdown in the next match section
4. **Automatic Updates:** Countdowns refresh automatically without user interaction

All countdown displays are localized in Czech and use consistent formatting across the application.
