export interface VenueWeather { june_avg_high_f: number; june_avg_low_f: number; july_avg_high_f: number; july_avg_low_f: number; description: string; } export interface Venue { id: string; name: string; city: string; state_province: string; country: "USA" | "Mexico" | "Canada"; capacity: number; coordinates: { lat: number; lng: number; }; address: string; timezone: string; region: "Western" | "Central" | "Eastern"; image_url?: string; notable: string[]; weather: VenueWeather; } export interface Team { id: string; name: string; code: string; group: string; confederation: "UEFA" | "CONMEBOL" | "CONCACAF" | "CAF" | "AFC" | "OFC"; fifa_ranking?: number; flag_emoji: string; is_host: boolean; } export interface Group { id: string; teams: string[]; venue_ids: string[]; } export type MatchRound = "Group Stage" | "Round of 32" | "Round of 16" | "Quarter-final" | "Semi-final" | "Third-place play-off" | "Final"; export type MatchStatus = "scheduled" | "live" | "completed" | "postponed" | "cancelled"; export interface Match { id: string; match_number: number; date: string; time_utc: string; venue_id: string; group?: string; round: MatchRound; home_team_id: string | null; away_team_id: string | null; home_placeholder?: string; away_placeholder?: string; home_score?: number; away_score?: number; status: MatchStatus; } export interface MatchFilter { date?: string; date_from?: string; date_to?: string; team?: string; group?: string; venue?: string; round?: MatchRound; status?: MatchStatus; } export interface TeamFilter { group?: string; confederation?: string; is_host?: boolean; } export interface VenueFilter { country?: string; city?: string; region?: string; } export interface KeyPlayer { name: string; position: string; club: string; } export interface WorldCupHistory { appearances: number; best_result: string; titles: number; } export interface TeamProfile { team_id: string; coach: string; playing_style: string; key_players: KeyPlayer[]; world_cup_history: WorldCupHistory; qualifying_summary: string; } export interface CityGuide { venue_id: string; metro_area: string; highlights: string; getting_there: string; food_and_drink: string[]; things_to_do: string[]; local_tips: string[]; } export interface HistoricalMeeting { year: number; host_country: string; round: string; score: string; penalty_score?: string; result: "team_a" | "team_b" | "draw"; venue_city: string; } export interface VisaRequirement { country: "USA" | "Mexico" | "Canada"; requirement: "visa-free" | "esta" | "eta" | "e-visa" | "visa-required"; max_stay_days: number; document: string; note: string; } export interface TeamVisaInfo { team_id: string; nationality: string; passport_country: string; entry_requirements: VisaRequirement[]; } export interface HistoricalMatchup { team_a: string; team_b: string; total_matches: number; team_a_wins: number; draws: number; team_b_wins: number; total_goals_team_a: number; total_goals_team_b: number; summary: string; meetings: HistoricalMeeting[]; } export type NewsCategory = "roster" | "venue" | "schedule" | "injury" | "analysis" | "transfer" | "qualifying" | "fan-content" | "logistics" | "general"; export interface NewsItem { id: string; title: string; date: string; source: string; url: string; summary: string; categories: NewsCategory[]; related_teams: string[]; fetched_at: string; } export interface FanZone { id: string; venue_id: string; city: string; country: "USA" | "Mexico" | "Canada"; name: string; location: string; address: string; coordinates: { lat: number; lng: number; }; capacity: number; free_entry: boolean; hours: string; activities: string[]; highlights: string; transportation: string; amenities: string[]; family_friendly: boolean; status: "confirmed" | "expected"; } export type InjuryStatus = "out" | "doubtful" | "recovering" | "fit"; export interface InjuryReport { player: string; team_id: string; position: string; injury: string; status: InjuryStatus; expected_return: string; last_updated: string; source: string; } export interface OddsEntry { team_id: string; odds: string; implied_probability: string; } export interface GroupPrediction { group: string; favorites: string[]; dark_horse: string; narrative: string; } export interface TournamentOdds { last_updated: string; source: string; tournament_winner: OddsEntry[]; golden_boot: Array<{ player: string; team_id: string; odds: string; }>; group_predictions: GroupPrediction[]; dark_horses: Array<{ team_id: string; reason: string; }>; }