// SunFront World Cup 2026 - fixture data sourced from FIFA.com
// Live scores fetched from /api/matches and merged at runtime.

// Names/codes match bill_entries.Shop / ShopID from the POS system —
// kept in sync with the real outlets that issue bills.
const OUTLETS = [
  { id: 1, code: 'SFC', name: 'SUN FRONT CENTRAL', address: 'Malé, Maldives' },
  { id: 2, code: 'SL',  name: 'SUN FRONT LIGHTIN',  address: 'Malé, Maldives' },
  { id: 3, code: 'SFB', name: 'SUN FRONT BIKES',    address: 'Malé, Maldives' },
  { id: 4, code: 'SB',  name: 'SUN FRONT TRADERS',  address: 'Malé, Maldives' },
  { id: 5, code: 'SN',  name: 'Sun Front LIVIN',    address: 'Malé, Maldives' },
  { id: 6, code: 'WS',  name: 'SUNFRONT ONLINE',    address: 'Online · webseytu.com' },
];

const TEAM = (name, flag, group) => ({ name, flag, group });
// All 48 FIFA World Cup 2026 qualified teams
// flag = FIFA 3-letter code used in api.fifa.com/api/v3/picture/flags-sq-4/{flag}
const TEAMS = {
  // Campaign teams (June 4)
  MLD: TEAM('Maldives',               'MLD', 'Campaign'),
  PAK: TEAM('Pakistan',               'PAK', 'Campaign'),
  AFG: TEAM('Afghanistan',            'AFG', 'Campaign'),
  BGD: TEAM('Bangladesh',             'BGD', 'Campaign'),
  MEX: TEAM('Mexico',                  'MEX', 'A'),
  SAF: TEAM('South Africa',            'RSA', 'A'),  // FIFA uses RSA not SAF
  KOR: TEAM('Korea Republic',          'KOR', 'A'),
  CZE: TEAM('Czechia',                 'CZE', 'A'),
  CAN: TEAM('Canada',                  'CAN', 'B'),
  BIH: TEAM('Bosnia and Herzegovina',  'BIH', 'B'),
  QAT: TEAM('Qatar',                   'QAT', 'B'),
  SUI: TEAM('Switzerland',             'SUI', 'B'),
  BRA: TEAM('Brazil',                  'BRA', 'C'),
  MAR: TEAM('Morocco',                 'MAR', 'C'),
  HAI: TEAM('Haiti',                   'HAI', 'C'),
  SCO: TEAM('Scotland',                'SCO', 'C'),
  USA: TEAM('USA',                     'USA', 'D'),
  PAR: TEAM('Paraguay',                'PAR', 'D'),
  AUS: TEAM('Australia',               'AUS', 'D'),
  TUR: TEAM('Turkiye',                 'TUR', 'D'),
  GER: TEAM('Germany',                 'GER', 'E'),
  CUW: TEAM('Curacao',                 'CUW', 'E'),
  CIV: TEAM('Cote dIvoire',            'CIV', 'E'),
  ECU: TEAM('Ecuador',                 'ECU', 'E'),
  NED: TEAM('Netherlands',             'NED', 'F'),
  JPN: TEAM('Japan',                   'JPN', 'F'),
  SWE: TEAM('Sweden',                  'SWE', 'F'),
  TUN: TEAM('Tunisia',                 'TUN', 'F'),
  BEL: TEAM('Belgium',                 'BEL', 'G'),
  EGY: TEAM('Egypt',                   'EGY', 'G'),
  IRN: TEAM('IR Iran',                 'IRN', 'G'),
  NZL: TEAM('New Zealand',             'NZL', 'G'),
  ESP: TEAM('Spain',                   'ESP', 'H'),
  CPV: TEAM('Cabo Verde',              'CPV', 'H'),
  KSA: TEAM('Saudi Arabia',            'KSA', 'H'),
  URU: TEAM('Uruguay',                 'URU', 'H'),
  FRA: TEAM('France',                  'FRA', 'I'),
  SEN: TEAM('Senegal',                 'SEN', 'I'),
  IRQ: TEAM('Iraq',                    'IRQ', 'I'),
  NOR: TEAM('Norway',                  'NOR', 'I'),
  ARG: TEAM('Argentina',               'ARG', 'J'),
  ALG: TEAM('Algeria',                 'ALG', 'J'),
  AUT: TEAM('Austria',                 'AUT', 'J'),
  JOR: TEAM('Jordan',                  'JOR', 'J'),
  POR: TEAM('Portugal',                'POR', 'K'),
  COD: TEAM('Congo DR',                'COD', 'K'),
  UZB: TEAM('Uzbekistan',              'UZB', 'K'),
  COL: TEAM('Colombia',                'COL', 'K'),
  ENG: TEAM('England',                 'ENG', 'L'),
  CRO: TEAM('Croatia',                 'CRO', 'L'),
  GHA: TEAM('Ghana',                   'GHA', 'L'),
  PAN: TEAM('Panama',                  'PAN', 'L'),
};

const NOW = Date.now();
const HOURS = (h) => h * 60 * 60 * 1000;

// Real FIFA World Cup 2026 fixtures (matches /api/matches STATIC_FIXTURES).
const RAW_MATCHES = [
  // ── Group A ──
  { id:400021443, a:'MEX', b:'SAF', kickoff:'2026-06-11T15:00:00-04:00', stage:'Group Stage · Group A', venue:'Estadio Azteca, Mexico City' },
  { id:400021441, a:'KOR', b:'CZE', kickoff:'2026-06-11T22:00:00-04:00', stage:'Group Stage · Group A', venue:'Estadio Akron, Guadalajara' },
  { id:400021440, a:'CZE', b:'SAF', kickoff:'2026-06-18T12:00:00-04:00', stage:'Group Stage · Group A', venue:'Mercedes-Benz Stadium, Atlanta' },
  { id:400021442, a:'MEX', b:'KOR', kickoff:'2026-06-18T21:00:00-04:00', stage:'Group Stage · Group A', venue:'Estadio Akron, Guadalajara' },
  { id:400021444, a:'CZE', b:'MEX', kickoff:'2026-06-24T21:00:00-04:00', stage:'Group Stage · Group A', venue:'Estadio Azteca, Mexico City' },
  { id:400021445, a:'SAF', b:'KOR', kickoff:'2026-06-24T21:00:00-04:00', stage:'Group Stage · Group A', venue:'Estadio BBVA, Monterrey' },
  // ── Group B ──
  { id:400021449, a:'CAN', b:'BIH', kickoff:'2026-06-12T15:00:00-04:00', stage:'Group Stage · Group B', venue:'BMO Field, Toronto' },
  { id:400021447, a:'QAT', b:'SUI', kickoff:'2026-06-13T15:00:00-04:00', stage:'Group Stage · Group B', venue:"Levi's Stadium, Santa Clara" },
  { id:400021446, a:'SUI', b:'BIH', kickoff:'2026-06-18T15:00:00-04:00', stage:'Group Stage · Group B', venue:'SoFi Stadium, Los Angeles' },
  { id:400021450, a:'CAN', b:'QAT', kickoff:'2026-06-18T18:00:00-04:00', stage:'Group Stage · Group B', venue:'BC Place, Vancouver' },
  { id:400021451, a:'SUI', b:'CAN', kickoff:'2026-06-24T15:00:00-04:00', stage:'Group Stage · Group B', venue:'BC Place, Vancouver' },
  { id:400021448, a:'BIH', b:'QAT', kickoff:'2026-06-24T15:00:00-04:00', stage:'Group Stage · Group B', venue:'Lumen Field, Seattle' },
  // ── Group C ──
  { id:400021456, a:'BRA', b:'MAR', kickoff:'2026-06-13T18:00:00-04:00', stage:'Group Stage · Group C', venue:'MetLife Stadium, New York/New Jersey' },
  { id:400021453, a:'HAI', b:'SCO', kickoff:'2026-06-13T21:00:00-04:00', stage:'Group Stage · Group C', venue:'Gillette Stadium, Boston' },
  { id:400021454, a:'SCO', b:'MAR', kickoff:'2026-06-19T18:00:00-04:00', stage:'Group Stage · Group C', venue:'Gillette Stadium, Boston' },
  { id:400021457, a:'BRA', b:'HAI', kickoff:'2026-06-19T20:30:00-04:00', stage:'Group Stage · Group C', venue:'Lincoln Financial Field, Philadelphia' },
  { id:400021455, a:'SCO', b:'BRA', kickoff:'2026-06-24T18:00:00-04:00', stage:'Group Stage · Group C', venue:'Hard Rock Stadium, Miami' },
  { id:400021452, a:'MAR', b:'HAI', kickoff:'2026-06-24T18:00:00-04:00', stage:'Group Stage · Group C', venue:'Mercedes-Benz Stadium, Atlanta' },
  // ── Group D ──
  { id:400021458, a:'USA', b:'PAR', kickoff:'2026-06-12T21:00:00-04:00', stage:'Group Stage · Group D', venue:'SoFi Stadium, Los Angeles' },
  { id:400021463, a:'AUS', b:'TUR', kickoff:'2026-06-14T00:00:00-04:00', stage:'Group Stage · Group D', venue:'BC Place, Vancouver' },
  { id:400021462, a:'USA', b:'AUS', kickoff:'2026-06-19T15:00:00-04:00', stage:'Group Stage · Group D', venue:'Lumen Field, Seattle' },
  { id:400021460, a:'TUR', b:'PAR', kickoff:'2026-06-19T23:00:00-04:00', stage:'Group Stage · Group D', venue:"Levi's Stadium, Santa Clara" },
  { id:400021459, a:'USA', b:'TUR', kickoff:'2026-06-25T22:00:00-04:00', stage:'Group Stage · Group D', venue:'SoFi Stadium, Los Angeles' },
  { id:400021461, a:'PAR', b:'AUS', kickoff:'2026-06-25T22:00:00-04:00', stage:'Group Stage · Group D', venue:"Levi's Stadium, Santa Clara" },
  // ── Group E ──
  { id:400021464, a:'GER', b:'CUW', kickoff:'2026-06-14T13:00:00-04:00', stage:'Group Stage · Group E', venue:'NRG Stadium, Houston' },
  { id:400021467, a:'CIV', b:'ECU', kickoff:'2026-06-14T19:00:00-04:00', stage:'Group Stage · Group E', venue:'Lincoln Financial Field, Philadelphia' },
  { id:400021469, a:'GER', b:'CIV', kickoff:'2026-06-20T16:00:00-04:00', stage:'Group Stage · Group E', venue:'BMO Field, Toronto' },
  { id:400021465, a:'ECU', b:'CUW', kickoff:'2026-06-20T20:00:00-04:00', stage:'Group Stage · Group E', venue:'Arrowhead Stadium, Kansas City' },
  { id:400021466, a:'ECU', b:'GER', kickoff:'2026-06-25T16:00:00-04:00', stage:'Group Stage · Group E', venue:'MetLife Stadium, New York/New Jersey' },
  { id:400021468, a:'CUW', b:'CIV', kickoff:'2026-06-25T16:00:00-04:00', stage:'Group Stage · Group E', venue:'Lincoln Financial Field, Philadelphia' },
  // ── Group F ──
  { id:400021470, a:'NED', b:'JPN', kickoff:'2026-06-14T16:00:00-04:00', stage:'Group Stage · Group F', venue:'AT&T Stadium, Dallas' },
  { id:400021474, a:'SWE', b:'TUN', kickoff:'2026-06-14T22:00:00-04:00', stage:'Group Stage · Group F', venue:'Estadio BBVA, Monterrey' },
  { id:400021472, a:'NED', b:'SWE', kickoff:'2026-06-20T13:00:00-04:00', stage:'Group Stage · Group F', venue:'NRG Stadium, Houston' },
  { id:400021475, a:'TUN', b:'JPN', kickoff:'2026-06-21T00:00:00-04:00', stage:'Group Stage · Group F', venue:'Estadio BBVA, Monterrey' },
  { id:400021471, a:'JPN', b:'SWE', kickoff:'2026-06-25T19:00:00-04:00', stage:'Group Stage · Group F', venue:'AT&T Stadium, Dallas' },
  { id:400021473, a:'TUN', b:'NED', kickoff:'2026-06-25T19:00:00-04:00', stage:'Group Stage · Group F', venue:'Arrowhead Stadium, Kansas City' },
  // ── Group G ──
  { id:400021478, a:'BEL', b:'EGY', kickoff:'2026-06-15T15:00:00-04:00', stage:'Group Stage · Group G', venue:'Lumen Field, Seattle' },
  { id:400021476, a:'IRN', b:'NZL', kickoff:'2026-06-15T21:00:00-04:00', stage:'Group Stage · Group G', venue:'SoFi Stadium, Los Angeles' },
  { id:400021477, a:'BEL', b:'IRN', kickoff:'2026-06-21T15:00:00-04:00', stage:'Group Stage · Group G', venue:'SoFi Stadium, Los Angeles' },
  { id:400021480, a:'NZL', b:'EGY', kickoff:'2026-06-21T21:00:00-04:00', stage:'Group Stage · Group G', venue:'BC Place, Vancouver' },
  { id:400021479, a:'EGY', b:'IRN', kickoff:'2026-06-26T23:00:00-04:00', stage:'Group Stage · Group G', venue:'Lumen Field, Seattle' },
  { id:400021481, a:'NZL', b:'BEL', kickoff:'2026-06-26T23:00:00-04:00', stage:'Group Stage · Group G', venue:'BC Place, Vancouver' },
  // ── Group H ──
  { id:400021482, a:'ESP', b:'CPV', kickoff:'2026-06-15T12:00:00-04:00', stage:'Group Stage · Group H', venue:'Mercedes-Benz Stadium, Atlanta' },
  { id:400021486, a:'KSA', b:'URU', kickoff:'2026-06-15T18:00:00-04:00', stage:'Group Stage · Group H', venue:'Hard Rock Stadium, Miami' },
  { id:400021483, a:'ESP', b:'KSA', kickoff:'2026-06-21T12:00:00-04:00', stage:'Group Stage · Group H', venue:'Mercedes-Benz Stadium, Atlanta' },
  { id:400021487, a:'URU', b:'CPV', kickoff:'2026-06-21T18:00:00-04:00', stage:'Group Stage · Group H', venue:'Hard Rock Stadium, Miami' },
  { id:400021484, a:'CPV', b:'KSA', kickoff:'2026-06-26T20:00:00-04:00', stage:'Group Stage · Group H', venue:'NRG Stadium, Houston' },
  { id:400021485, a:'URU', b:'ESP', kickoff:'2026-06-26T20:00:00-04:00', stage:'Group Stage · Group H', venue:'Estadio Akron, Guadalajara' },
  // ── Group I ──
  { id:400021490, a:'FRA', b:'SEN', kickoff:'2026-06-16T15:00:00-04:00', stage:'Group Stage · Group I', venue:'MetLife Stadium, New York/New Jersey' },
  { id:400021488, a:'IRQ', b:'NOR', kickoff:'2026-06-16T18:00:00-04:00', stage:'Group Stage · Group I', venue:'Gillette Stadium, Boston' },
  { id:400021492, a:'FRA', b:'IRQ', kickoff:'2026-06-22T17:00:00-04:00', stage:'Group Stage · Group I', venue:'Lincoln Financial Field, Philadelphia' },
  { id:400021491, a:'NOR', b:'SEN', kickoff:'2026-06-22T20:00:00-04:00', stage:'Group Stage · Group I', venue:'MetLife Stadium, New York/New Jersey' },
  { id:400021489, a:'NOR', b:'FRA', kickoff:'2026-06-26T15:00:00-04:00', stage:'Group Stage · Group I', venue:'Gillette Stadium, Boston' },
  { id:400021493, a:'SEN', b:'IRQ', kickoff:'2026-06-26T15:00:00-04:00', stage:'Group Stage · Group I', venue:'BMO Field, Toronto' },
  // ── Group J ──
  { id:400021496, a:'ARG', b:'ALG', kickoff:'2026-06-16T21:00:00-04:00', stage:'Group Stage · Group J', venue:'Arrowhead Stadium, Kansas City' },
  { id:400021498, a:'AUT', b:'JOR', kickoff:'2026-06-17T00:00:00-04:00', stage:'Group Stage · Group J', venue:"Levi's Stadium, Santa Clara" },
  { id:400021494, a:'ARG', b:'AUT', kickoff:'2026-06-22T13:00:00-04:00', stage:'Group Stage · Group J', venue:'AT&T Stadium, Dallas' },
  { id:400021499, a:'JOR', b:'ALG', kickoff:'2026-06-22T23:00:00-04:00', stage:'Group Stage · Group J', venue:"Levi's Stadium, Santa Clara" },
  { id:400021495, a:'ALG', b:'AUT', kickoff:'2026-06-27T22:00:00-04:00', stage:'Group Stage · Group J', venue:'Arrowhead Stadium, Kansas City' },
  { id:400021497, a:'JOR', b:'ARG', kickoff:'2026-06-27T22:00:00-04:00', stage:'Group Stage · Group J', venue:'AT&T Stadium, Dallas' },
  // ── Group K ──
  { id:400021502, a:'POR', b:'COD', kickoff:'2026-06-17T13:00:00-04:00', stage:'Group Stage · Group K', venue:'NRG Stadium, Houston' },
  { id:400021504, a:'UZB', b:'COL', kickoff:'2026-06-17T22:00:00-04:00', stage:'Group Stage · Group K', venue:'Estadio Azteca, Mexico City' },
  { id:400021503, a:'POR', b:'UZB', kickoff:'2026-06-23T13:00:00-04:00', stage:'Group Stage · Group K', venue:'NRG Stadium, Houston' },
  { id:400021501, a:'COL', b:'COD', kickoff:'2026-06-23T22:00:00-04:00', stage:'Group Stage · Group K', venue:'Estadio Akron, Guadalajara' },
  { id:400021500, a:'COL', b:'POR', kickoff:'2026-06-27T19:30:00-04:00', stage:'Group Stage · Group K', venue:'Hard Rock Stadium, Miami' },
  { id:400021505, a:'COD', b:'UZB', kickoff:'2026-06-27T19:30:00-04:00', stage:'Group Stage · Group K', venue:'Mercedes-Benz Stadium, Atlanta' },
  // ── Group L ──
  { id:400021507, a:'ENG', b:'CRO', kickoff:'2026-06-17T16:00:00-04:00', stage:'Group Stage · Group L', venue:'AT&T Stadium, Dallas' },
  { id:400021510, a:'GHA', b:'PAN', kickoff:'2026-06-17T19:00:00-04:00', stage:'Group Stage · Group L', venue:'BMO Field, Toronto' },
  { id:400021506, a:'ENG', b:'GHA', kickoff:'2026-06-23T16:00:00-04:00', stage:'Group Stage · Group L', venue:'Gillette Stadium, Boston' },
  { id:400021511, a:'PAN', b:'CRO', kickoff:'2026-06-23T19:00:00-04:00', stage:'Group Stage · Group L', venue:'BMO Field, Toronto' },
  { id:400021508, a:'PAN', b:'ENG', kickoff:'2026-06-27T17:00:00-04:00', stage:'Group Stage · Group L', venue:'MetLife Stadium, New York/New Jersey' },
  { id:400021509, a:'CRO', b:'GHA', kickoff:'2026-06-27T17:00:00-04:00', stage:'Group Stage · Group L', venue:'Lincoln Financial Field, Philadelphia' },

  // ── Round of 32 -- bracket slots TBD until group stage settles. Update a/b with team codes once FIFA confirms qualifiers. ──
  { id:400021601, a:'Runner-up Group A', b:'Runner-up Group B', kickoff:'2026-06-28T12:00:00-07:00', stage:'Round of 32', venue:'SoFi Stadium, Inglewood' },
  { id:400021602, a:'Winner Group C', b:'Runner-up Group F', kickoff:'2026-06-29T12:00:00-05:00', stage:'Round of 32', venue:'NRG Stadium, Houston' },
  { id:400021603, a:'Winner Group E', b:'3rd Group A/B/C/D/F', kickoff:'2026-06-29T16:30:00-04:00', stage:'Round of 32', venue:'Gillette Stadium, Foxborough' },
  { id:400021604, a:'Winner Group F', b:'Runner-up Group C', kickoff:'2026-06-29T19:00:00-05:00', stage:'Round of 32', venue:'Estadio BBVA, Guadalupe' },
  { id:400021605, a:'Runner-up Group E', b:'Runner-up Group I', kickoff:'2026-06-30T12:00:00-05:00', stage:'Round of 32', venue:'AT&T Stadium, Arlington' },
  { id:400021606, a:'Winner Group I', b:'3rd Group C/D/F/G/H', kickoff:'2026-06-30T17:00:00-04:00', stage:'Round of 32', venue:'MetLife Stadium, East Rutherford' },
  { id:400021607, a:'Winner Group A', b:'3rd Group C/E/F/H/I', kickoff:'2026-06-30T19:00:00-06:00', stage:'Round of 32', venue:'Estadio Azteca, Mexico City' },
  { id:400021608, a:'Winner Group L', b:'3rd Group E/H/I/J/K', kickoff:'2026-07-01T12:00:00-04:00', stage:'Round of 32', venue:'Mercedes-Benz Stadium, Atlanta' },
  { id:400021609, a:'Winner Group G', b:'3rd Group A/E/H/I/J', kickoff:'2026-07-01T13:00:00-07:00', stage:'Round of 32', venue:'Lumen Field, Seattle' },
  { id:400021610, a:'Winner Group D', b:'3rd Group B/E/F/I/J', kickoff:'2026-07-01T17:00:00-07:00', stage:'Round of 32', venue:"Levi's Stadium, Santa Clara" },
  { id:400021611, a:'Winner Group H', b:'Runner-up Group J', kickoff:'2026-07-02T12:00:00-07:00', stage:'Round of 32', venue:'SoFi Stadium, Inglewood' },
  { id:400021612, a:'Runner-up Group K', b:'Runner-up Group L', kickoff:'2026-07-02T19:00:00-04:00', stage:'Round of 32', venue:'BMO Field, Toronto' },
  { id:400021613, a:'Winner Group B', b:'3rd Group E/F/G/I/J', kickoff:'2026-07-02T20:00:00-07:00', stage:'Round of 32', venue:'BC Place, Vancouver' },
  { id:400021614, a:'Runner-up Group D', b:'Runner-up Group G', kickoff:'2026-07-03T13:00:00-05:00', stage:'Round of 32', venue:'AT&T Stadium, Arlington' },
  { id:400021615, a:'Winner Group J', b:'Runner-up Group H', kickoff:'2026-07-03T18:00:00-04:00', stage:'Round of 32', venue:'Hard Rock Stadium, Miami Gardens' },
  { id:400021616, a:'Winner Group K', b:'3rd Group D/E/I/J/L', kickoff:'2026-07-03T20:30:00-05:00', stage:'Round of 32', venue:'Arrowhead Stadium, Kansas City' },

  // ── Round of 16 ──
  { id:400021617, a:'Winner Match 73', b:'Winner Match 75', kickoff:'2026-07-04T12:00:00-05:00', stage:'Round of 16', venue:'NRG Stadium, Houston' },
  { id:400021618, a:'Winner Match 74', b:'Winner Match 77', kickoff:'2026-07-04T17:00:00-04:00', stage:'Round of 16', venue:'Lincoln Financial Field, Philadelphia' },
  { id:400021619, a:'Winner Match 76', b:'Winner Match 78', kickoff:'2026-07-05T16:00:00-04:00', stage:'Round of 16', venue:'MetLife Stadium, East Rutherford' },
  { id:400021620, a:'Winner Match 79', b:'Winner Match 80', kickoff:'2026-07-05T18:00:00-06:00', stage:'Round of 16', venue:'Estadio Azteca, Mexico City' },
  { id:400021621, a:'Winner Match 83', b:'Winner Match 84', kickoff:'2026-07-06T14:00:00-05:00', stage:'Round of 16', venue:'AT&T Stadium, Arlington' },
  { id:400021622, a:'Winner Match 81', b:'Winner Match 82', kickoff:'2026-07-06T17:00:00-07:00', stage:'Round of 16', venue:'Lumen Field, Seattle' },
  { id:400021623, a:'Winner Match 86', b:'Winner Match 88', kickoff:'2026-07-07T12:00:00-04:00', stage:'Round of 16', venue:'Mercedes-Benz Stadium, Atlanta' },
  { id:400021624, a:'Winner Match 85', b:'Winner Match 87', kickoff:'2026-07-07T13:00:00-07:00', stage:'Round of 16', venue:'BC Place, Vancouver' },

  // ── Quarter-finals ──
  { id:400021625, a:'Winner Match 89', b:'Winner Match 90', kickoff:'2026-07-09T16:00:00-04:00', stage:'Quarter-final', venue:'Gillette Stadium, Foxborough' },
  { id:400021626, a:'Winner Match 93', b:'Winner Match 94', kickoff:'2026-07-10T12:00:00-07:00', stage:'Quarter-final', venue:'SoFi Stadium, Inglewood' },
  { id:400021627, a:'Winner Match 91', b:'Winner Match 92', kickoff:'2026-07-11T17:00:00-04:00', stage:'Quarter-final', venue:'Hard Rock Stadium, Miami Gardens' },
  { id:400021628, a:'Winner Match 95', b:'Winner Match 96', kickoff:'2026-07-11T20:00:00-05:00', stage:'Quarter-final', venue:'Arrowhead Stadium, Kansas City' },

  // ── Semi-finals ──
  { id:400021629, a:'Winner Match 97', b:'Winner Match 98', kickoff:'2026-07-14T14:00:00-05:00', stage:'Semi-final', venue:'AT&T Stadium, Arlington' },
  { id:400021630, a:'Winner Match 99', b:'Winner Match 100', kickoff:'2026-07-15T15:00:00-04:00', stage:'Semi-final', venue:'Mercedes-Benz Stadium, Atlanta' },

  // ── Third place & Final ──
  { id:400021631, a:'Loser Match 101', b:'Loser Match 102', kickoff:'2026-07-18T17:00:00-04:00', stage:'Third place', venue:'Hard Rock Stadium, Miami Gardens' },
  { id:400021632, a:'Winner Match 101', b:'Winner Match 102', kickoff:'2026-07-19T15:00:00-04:00', stage:'Final', venue:'MetLife Stadium, East Rutherford' },
];

function deriveStatus(m) {
  const kickoffMs = new Date(m.kickoff).getTime();
  if (m.settled) return 'SETTLED';
  if (NOW >= kickoffMs) return 'CLOSED';
  return 'OPEN'; // all matches open from campaign start until kickoff
}

// Knockout slots (e.g. "Winner Group C", "Loser Match 101") aren't in TEAMS yet --
// fall back to a placeholder team object. Replace m.a/m.b with the real 3-letter code
// once FIFA.com confirms the bracket matchup.
const TBD_TEAM = (label) => ({ name: label, flag: '', group: null });

const MATCHES = RAW_MATCHES.map(m => {
  const kickoffAt = new Date(m.kickoff);
  return {
    id: m.id,
    teamA: TEAMS[m.a] || TBD_TEAM(m.a),
    teamB: TEAMS[m.b] || TBD_TEAM(m.b),
    teamAKey: m.a,
    teamBKey: m.b,
    kickoffAt,
    kickoffMs: kickoffAt.getTime(),
    stage: m.stage,
    venue: m.venue,
    status: deriveStatus(m),
    settled: m.settled || null,
  };
});

// Aggregated dashboard data. byMatch feeds the public predict page's
// "crowd lean" bars with placeholder splits until real per-match
// distribution is wired up; admin views source live data from
// /api/get-predictions instead of this object.
const DASHBOARD = {
  byMatch: (function() {
    var settled = MATCHES.filter(function(m){ return m.status === 'SETTLED'; });
    var open    = MATCHES.filter(function(m){ return m.status === 'OPEN'; });
    var rows = settled.concat(open).slice(0, 5);
    var counts = [[186,42,98],[204,31,117],[91,58,143],[138,49,112],[97,62,88]];
    return rows.map(function(m, i) {
      var c = counts[i] || [1,1,1];
      return { id:m.id, a:m.teamA.name, b:m.teamB.name, flagA:m.teamA.flag, flagB:m.teamB.flag, stage:m.stage, a_n:c[0], draw_n:c[1], b_n:c[2] };
    });
  }()),
};

Object.assign(window, { OUTLETS, TEAMS, MATCHES, DASHBOARD, NOW, HOURS });

/* ========================================================================
   Admin-only mock data - these would come from server endpoints in prod.
   ======================================================================== */

// Default site content - edited via Content tab.
const SITE_CONTENT_DEFAULTS = {
  hero: {
    eyebrow: 'World Cup 2026 · Campaign live',
    headline: 'Every receipt is your free ticket to win.',
    headlineHighlight: 'free ticket',
    sub: 'Shop at any SunFront outlet, predict the match winner, and lock yourself into the lucky draw for prizes after every game of the World Cup 2026.',
    ctaPrimary: 'Predict now',
    ctaSecondary: 'Live stats',
  },
  ticket: {
    title: 'FIFA World Cup',
    year: '2026',
    region: 'USA · Canada · Mexico',
    outlets: '04',
    matches: '104',
  },
  hotline: '+960 781-5113',
  hotlineRegion: 'Maldives',
  tagline: 'Quality & Style',
  since: '1989',
  footerLinks: 'sunfront.com.mv · webseytu.com',
  footerLegal: '© 2026 SunFront Pvt Ltd. Independent campaign, not affiliated with FIFA.',
};

const STAGES = ['Group Stage', 'Round of 32', 'Round of 16', 'Quarter-final', 'Semi-final', 'Third place', 'Final'];

Object.assign(window, { SITE_CONTENT_DEFAULTS, STAGES });
