(function() {
  // ============================================================
  // CONFIGURATION — paste the published Google Sheet CSV URL here
  // (Sheet → File → Share → Publish to web → CSV → copy URL)
  // ============================================================
  const SHEET_CSV_URL = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQYG4-kSC8Tua3TOKckYrgyuxfshGzrKtiUl73oy2o3MML1oybOjV9ippBiT3LRVqSWe0fPNwAxUEp7/pub?gid=326209022&single=true&output=csv';

  // Bracket progression: which earlier matches feed each later one
  const PROGRESSION = {
    5: [1, 2],   // SF1 = winners of R1 matches 1 + 2
    6: [3, 4],   // SF2 = winners of R1 matches 3 + 4
    7: [5, 6],   // Final = winners of SF matches 5 + 6
  };

  // Demo data shown until SHEET_CSV_URL is configured
  const DEMO_ROWS = [
    ['1', 'Round 1', 'W. King / R. Stutchbury / L. Forster / P. Goodwin',
                    'P. Maiden / N. Weiner / B. Edwards / I. Kimmorley',  '', '', '', ''],
    ['2', 'Round 1', 'D. Cornelius / D. Boyle / A. Barwick / R. Duthie',
                    'J. Millyard / M. Sher / G. Ryman / G. Forster',      '', '', '', ''],
    ['3', 'Round 1', 'R. Reilly / K. Petkovic / A. Plambeck / J. Dunn',
                    'I. Knevitt / A. Ockelford / R. Fendel / B. Silversides', '', '', '', ''],
    ['4', 'Round 1', 'T. Boyle / F. Jorgensen / R. Woods / P. Lewis',
                    'R. Garrity / O. Holden / T. Cook / P. Duffy',        '', '', '', ''],
    ['5', 'Semi-Final', '', '', '', '', '', ''],
    ['6', 'Semi-Final', '', '', '', '', '', ''],
    ['7', 'Final',      '', '', '', '', '', ''],
  ];

  // Which DOM box represents which slot. Slot IDs match data-slot attrs.
  // R1: slots r1-1 .. r1-8 = team A & B of matches 1..4 (in order)
  // SF: slots sf-1 .. sf-4 = winners of matches 1, 2, 3, 4
  // FN: slots fn-1, fn-2   = winners of matches 5, 6 (the SFs)
  // CH: slot champ        = winner of match 7 (the Final)
  const SLOT_MAP = {
    'r1-1': { source: 'matchTeam', match: 1, side: 'A' },
    'r1-2': { source: 'matchTeam', match: 1, side: 'B' },
    'r1-3': { source: 'matchTeam', match: 2, side: 'A' },
    'r1-4': { source: 'matchTeam', match: 2, side: 'B' },
    'r1-5': { source: 'matchTeam', match: 3, side: 'A' },
    'r1-6': { source: 'matchTeam', match: 3, side: 'B' },
    'r1-7': { source: 'matchTeam', match: 4, side: 'A' },
    'r1-8': { source: 'matchTeam', match: 4, side: 'B' },
    'sf-1': { source: 'matchWinner', match: 1 },
    'sf-2': { source: 'matchWinner', match: 2 },
    'sf-3': { source: 'matchWinner', match: 3 },
    'sf-4': { source: 'matchWinner', match: 4 },
    'fn-1': { source: 'matchWinner', match: 5 },
    'fn-2': { source: 'matchWinner', match: 6 },
    'champ': { source: 'matchWinner', match: 7 },
  };

  const updatedEl = document.getElementById('cf26-updated');

  function escapeHtml(s) {
    return String(s == null ? '' : s).replace(/[&<>"']/g,
      c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'})[c]);
  }

  function parseCSV(text) {
    const rows = []; let row = [], cell = '', inQ = false;
    for (let i = 0; i < text.length; i++) {
      const c = text[i];
      if (inQ) {
        if (c === '"' && text[i+1] === '"') { cell += '"'; i++; }
        else if (c === '"') { inQ = false; }
        else { cell += c; }
      } else {
        if (c === '"') { inQ = true; }
        else if (c === ',') { row.push(cell); cell = ''; }
        else if (c === '\n') { row.push(cell); rows.push(row); row = []; cell = ''; }
        else if (c === '\r') { /* skip */ }
        else { cell += c; }
      }
    }
    if (cell.length || row.length) { row.push(cell); rows.push(row); }
    return rows;
  }

  function findCol(headers, names) {
    for (const n of names) {
      const i = headers.findIndex(h => h.trim().toLowerCase() === n.toLowerCase());
      if (i !== -1) return i;
    }
    return -1;
  }

  function rowsToMatches(rows) {
    if (rows.length < 2) return {};
    let headerIdx = rows.findIndex(r =>
      r.some(c => /match/i.test(c)) && r.some(c => /round/i.test(c))
    );
    if (headerIdx === -1) headerIdx = 0;
    const h = rows[headerIdx];
    const cM = findCol(h, ['Match','Match #','Match No']);
    const cR = findCol(h, ['Round']);
    const cA = findCol(h, ['Team A']);
    const cB = findCol(h, ['Team B']);
    const cW = findCol(h, ['Winner','Winner (A or B)','Won By']);
    const cSA = findCol(h, ['Score A']);
    const cSB = findCol(h, ['Score B']);
    if (cM === -1) return {};

    const out = {};
    for (let i = headerIdx + 1; i < rows.length; i++) {
      const r = rows[i];
      const id = parseInt((r[cM] || '').trim(), 10);
      if (!id) continue;
      out[id] = {
        id,
        round:  (r[cR]  || '').trim(),
        teamA:  cleanTeam((r[cA]  || '').trim()),
        teamB:  cleanTeam((r[cB]  || '').trim()),
        winner: (r[cW]  || '').trim().toUpperCase(),
        scoreA: (r[cSA] || '').trim(),
        scoreB: (r[cSB] || '').trim(),
      };
    }
    return out;
  }

  function cleanTeam(s) {
    if (!s) return '';
    if (/^\(winner of/i.test(s.trim())) return '';
    return s;
  }

  // Recursive: returns the team that won match `id`, walking back
  // through PROGRESSION if the immediate match's team slot is empty.
  function winnerOf(id, matches) {
    const m = matches[id];
    if (!m) return '';
    if (m.winner === 'A') return m.teamA || resolveFeeder(id, 0, matches);
    if (m.winner === 'B') return m.teamB || resolveFeeder(id, 1, matches);
    return '';
  }
  function resolveFeeder(matchId, sideIdx, matches) {
    const fed = PROGRESSION[matchId];
    if (!fed) return '';
    return winnerOf(fed[sideIdx], matches);
  }

  function teamForSlot(slotId, matches) {
    const def = SLOT_MAP[slotId];
    if (!def) return { name: '', score: '' };
    const m = matches[def.match];
    if (!m) return { name: '', score: '' };

    if (def.source === 'matchTeam') {
      // Direct R1 team — never a winner-derived value
      const name = def.side === 'A' ? m.teamA : m.teamB;
      const score = def.side === 'A' ? m.scoreA : m.scoreB;
      return { name, score };
    }
    if (def.source === 'matchWinner') {
      // The winner of this match
      const name = winnerOf(def.match, matches);
      // Score = winner's score for this match (not displayed for SF/F since
      // it'd duplicate what's shown on the next round). Skip score here.
      return { name, score: '' };
    }
    return { name: '', score: '' };
  }

  function renderTeamHtml(name, score, emptyLabel) {
    if (!name) {
      return `<span class="cf26-empty">${escapeHtml(emptyLabel || '')}</span>`;
    }
    const players = name.split(/\s*\/\s*/);
    const playersHtml = players
      .map(p => `<span class="cf26-player">${escapeHtml(p.toUpperCase())}</span>`)
      .join('');
    const scoreHtml = score ? `<span class="cf26-score">${escapeHtml(score)}</span>` : '';
    return playersHtml + scoreHtml;
  }

  function emptyLabelForSlot(slotId) {
    if (slotId === 'champ') return '';
    if (slotId.indexOf('sf-') === 0) return '';   // pink boxes empty by default
    if (slotId.indexOf('fn-') === 0) return '';   // green boxes empty by default
    return '';
  }

  function render(matches) {
    document.querySelectorAll('.cf26-box').forEach(el => {
      const slot = el.getAttribute('data-slot');
      const { name, score } = teamForSlot(slot, matches);
      el.innerHTML = renderTeamHtml(name, score, emptyLabelForSlot(slot));
    });
  }

  function setUpdated(date, isDemo) {
    if (isDemo) {
      updatedEl.textContent = 'Demo data — paste your Google Sheet URL into the script to go live.';
    } else {
      const opts = { day: 'numeric', month: 'short', hour: 'numeric', minute: '2-digit' };
      updatedEl.textContent = 'Last updated ' + date.toLocaleDateString('en-AU', opts);
    }
  }

  async function loadAndRender() {
    const isDemo = !SHEET_CSV_URL || SHEET_CSV_URL.indexOf('PASTE_YOUR') !== -1;
    try {
      let rows;
      if (isDemo) {
        rows = [['Match','Round','Team A','Team B','Winner','Score A','Score B','Notes'], ...DEMO_ROWS];
      } else {
        const url = SHEET_CSV_URL + (SHEET_CSV_URL.includes('?') ? '&' : '?') + 'cb=' + Date.now();
        const resp = await fetch(url);
        if (!resp.ok) throw new Error('HTTP ' + resp.status);
        rows = parseCSV(await resp.text());
      }
      const matches = rowsToMatches(rows);
      render(matches);
      setUpdated(new Date(), isDemo);
    } catch (e) {
      console.error('Bracket load error:', e);
      updatedEl.textContent = 'Could not load tournament data. Check the Sheet is published to the web.';
    }
  }

  loadAndRender();
  setInterval(loadAndRender, 5 * 60 * 1000);
})();