// majorView.jsx - playoffs bracket view
const { useState: useStM } = React;

const PLAYOFF_TEAM_NAMES = {
  my_team:'Meu Time',
  lum2016:'Luminosity',
  ast2018:'Astralis',
  navi2021:'NAVI',
  faze2022:'FaZe',
  fnc2015:'fnatic',
  spr2024:'Spirit',
  sk2017:'SK',
  vp2014:'Virtus.pro',
  c92018:'Cloud9',
  liq2019:'Liquid',
  heroic2023:'HEROIC',
  gambit2017:'Gambit',
  vit2023:'Vitality',
  g22023:'G2',
  nip2013:'NiP',
  envy2015:'EnVyUs',
  navi2010:'NAVI 1.6',
  mouz2024:'MOUZ',
  furia2022:'FURIA',
  outsiders2022:'Outsiders',
};

function MajorView({ bracket, myTeamId, onPlayMatch, stage }) {
  const isMobile = window.useIsMobileView?.(820) || false;
  const champion = bracket.final?.result
    ? (bracket.final.result.winner === 'A' ? bracket.final.teamA : bracket.final.teamB)
    : null;

  if (isMobile) {
    return (
      <MajorMobileView
        bracket={bracket}
        myTeamId={myTeamId}
        onPlayMatch={onPlayMatch}
        stage={stage}
        champion={champion}
      />
    );
  }

  return (
    <main style={{ maxWidth:1380, margin:'0 auto', padding:'24px 30px 60px' }}>
      <div style={{ display:'flex', alignItems:'flex-end', justifyContent:'space-between',
        gap:16, marginBottom:18 }}>
        <div>
          <h2 style={{ fontFamily:'var(--font-cond)', fontWeight:800, fontSize:26,
            color:'var(--text-1)', letterSpacing:'0.055em', textTransform:'uppercase',
            marginBottom:2, lineHeight:1 }}>
            Playoffs
          </h2>
          <p style={{ color:'var(--text-3)', fontSize:12 }}>
            Mata-mata do Major - quartas, semifinais e final em BO3
          </p>
        </div>
        <StageTabs stage={stage} />
      </div>

      <section style={{ overflowX:'auto', borderRadius:'var(--r-lg)',
        border:'1px solid rgba(54,122,83,0.34)',
        background:
          'radial-gradient(circle at 18% 12%, rgba(65,141,83,0.34), transparent 34%),' +
          'radial-gradient(circle at 74% 40%, rgba(27,96,66,0.28), transparent 35%),' +
          'linear-gradient(135deg, #12301f 0%, #0b2218 48%, #071912 100%)',
        boxShadow:'inset 0 0 90px rgba(0,0,0,0.20), 0 18px 44px rgba(0,0,0,0.25)' }}>
        <div style={{ minWidth:1120, padding:'22px 22px 24px' }}>
          <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between',
            gap:14, marginBottom:18, color:'rgba(226,238,226,0.92)' }}>
            <div style={{ fontFamily:'var(--font-cond)', fontSize:18, fontWeight:800,
              letterSpacing:'0.08em', textTransform:'uppercase' }}>
              Playoff bracket
            </div>
            <div style={{ fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
              letterSpacing:'0.12em', textTransform:'uppercase', color:'rgba(226,238,226,0.58)' }}>
              {stage === 'qf' ? 'Quartas' : stage === 'sf' ? 'Semifinais' : 'Final'}
            </div>
          </div>

          <div style={{ display:'grid',
            gridTemplateColumns:'300px 54px 300px 54px 300px 54px 220px',
            alignItems:'center' }}>
            <BracketColumn title="Quartas de final" subtitle="8 equipes">
              {bracket.qf.map(match => (
                <BracketCard key={match.id} match={match} myTeamId={myTeamId}
                  stage="qf" currentStage={stage} onPlay={() => onPlayMatch(match, 'qf')} />
              ))}
            </BracketColumn>

            <ConnectorStack count={4} />

            <BracketColumn title="Semifinais" subtitle="4 equipes" compact>
              {bracket.sf.map(match => (
                <BracketCard key={match.id} match={match} myTeamId={myTeamId}
                  stage="sf" currentStage={stage} onPlay={() => onPlayMatch(match, 'sf')} />
              ))}
            </BracketColumn>

            <ConnectorStack count={2} tall />

            <BracketColumn title="Grande final" subtitle="2 equipes" finalCol>
              <BracketCard match={bracket.final} myTeamId={myTeamId}
                stage="final" currentStage={stage} onPlay={() => onPlayMatch(bracket.final, 'final')} />
            </BracketColumn>

            <ConnectorStack count={1} champion />

            <ChampionSlot champion={champion} myTeamId={myTeamId} />
          </div>
        </div>
      </section>
    </main>
  );
}

function MajorMobileView({ bracket, myTeamId, onPlayMatch, stage, champion }) {
  const activeIndex = playoffStageIndex(stage);
  const [selected, setSelected] = useStM(stage || 'qf');
  React.useEffect(() => setSelected(stage || 'qf'), [stage]);

  const stageMatches = selected === 'qf' ? bracket.qf
    : selected === 'sf' ? bracket.sf
    : selected === 'final' ? [bracket.final]
    : [];
  const myNext = findMyPlayableMatch(bracket, stage, myTeamId);

  return (
    <main style={{ maxWidth:560, margin:'0 auto', padding:'14px 14px 42px' }}>
      <div className="mobile-rise" style={{ marginBottom:14 }}>
        <h2 style={{ fontFamily:'var(--font-cond)', fontWeight:800, fontSize:24,
          color:'var(--text-1)', letterSpacing:'0.055em', textTransform:'uppercase',
          marginBottom:4, lineHeight:1 }}>
          Playoffs
        </h2>
        <p style={{ color:'var(--text-3)', fontSize:12, lineHeight:1.35 }}>
          Mata-mata do Major. Quartas, semis e final em BO3.
        </p>
      </div>

      <MobilePlayoffHero
        bracket={bracket}
        myTeamId={myTeamId}
        stage={stage}
        champion={champion}
        myNext={myNext}
        onPlayMatch={onPlayMatch}
      />

      <MobilePlayoffPath bracket={bracket} myTeamId={myTeamId} activeIndex={activeIndex} />

      <div className="touch-scroll" style={{ display:'flex', gap:7, margin:'14px -14px 12px',
        padding:'0 14px' }}>
        {[
          ['qf','Quartas'],
          ['sf','Semis'],
          ['final','Final'],
          ['champion','Campeao'],
        ].map(([id, label], index) => {
          const active = selected === id;
          const done = id === 'champion' ? !!champion : index < activeIndex;
          return (
            <button key={id} data-sound="option" onClick={() => setSelected(id)}
              style={{ flex:'0 0 auto', padding:'8px 12px',
                background:active ? 'rgba(244,165,35,0.13)' : done ? 'rgba(25,197,108,0.08)' : 'var(--bg-2)',
                border:`1px solid ${active ? 'rgba(244,165,35,0.36)' : done ? 'rgba(25,197,108,0.22)' : 'var(--border-2)'}`,
                borderRadius:'var(--r-md)', color:active ? 'var(--accent)' : 'var(--text-2)',
                fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
                letterSpacing:'0.11em', textTransform:'uppercase', cursor:'pointer',
                whiteSpace:'nowrap' }}>
              {label}
            </button>
          );
        })}
      </div>

      <section className="mobile-slide" key={selected}
        style={{ display:'grid', gap:10, marginBottom:14 }}>
        <div style={{ display:'flex', alignItems:'baseline', justifyContent:'space-between',
          gap:10 }}>
          <div style={{ fontFamily:'var(--font-cond)', fontSize:17, fontWeight:800,
            color:'var(--text-1)', letterSpacing:'0.08em', textTransform:'uppercase' }}>
            {selected === 'champion' ? 'Campeao' : stageLabel(selected)}
          </div>
          <div style={{ fontFamily:'var(--font-cond)', fontSize:10, fontWeight:800,
            color:'var(--text-3)', letterSpacing:'0.12em', textTransform:'uppercase' }}>
            {bracket.matchFormat || 'MR16'}
          </div>
        </div>

        {selected === 'champion' ? (
          <ChampionSlot champion={champion} myTeamId={myTeamId} />
        ) : (
          stageMatches.map(match => (
            <BracketCard key={match.id} match={match} myTeamId={myTeamId}
              stage={selected} currentStage={stage}
              onPlay={() => onPlayMatch(match, selected)} />
          ))
        )}
      </section>

      <details style={{ background:'var(--bg-2)', border:'1px solid var(--border-2)',
        borderRadius:'var(--r-lg)', overflow:'hidden' }}>
        <summary style={{ listStyle:'none', cursor:'pointer', padding:'12px 13px',
          fontFamily:'var(--font-cond)', fontSize:12, fontWeight:800,
          color:'var(--text-2)', letterSpacing:'0.1em', textTransform:'uppercase' }}>
          Bracket completo
        </summary>
        <div className="touch-scroll" style={{ borderTop:'1px solid var(--border-1)',
          background:
            'radial-gradient(circle at 18% 12%, rgba(65,141,83,0.30), transparent 34%),' +
            'linear-gradient(135deg, #12301f 0%, #071912 100%)' }}>
          <div style={{ minWidth:1120, padding:'20px' }}>
            <div style={{ display:'grid',
              gridTemplateColumns:'300px 54px 300px 54px 300px 54px 220px',
              alignItems:'center' }}>
              <BracketColumn title="Quartas de final" subtitle="8 equipes">
                {bracket.qf.map(match => (
                  <BracketCard key={match.id} match={match} myTeamId={myTeamId}
                    stage="qf" currentStage={stage} onPlay={() => onPlayMatch(match, 'qf')} />
                ))}
              </BracketColumn>
              <ConnectorStack count={4} />
              <BracketColumn title="Semifinais" subtitle="4 equipes" compact>
                {bracket.sf.map(match => (
                  <BracketCard key={match.id} match={match} myTeamId={myTeamId}
                    stage="sf" currentStage={stage} onPlay={() => onPlayMatch(match, 'sf')} />
                ))}
              </BracketColumn>
              <ConnectorStack count={2} tall />
              <BracketColumn title="Grande final" subtitle="2 equipes" finalCol>
                <BracketCard match={bracket.final} myTeamId={myTeamId}
                  stage="final" currentStage={stage} onPlay={() => onPlayMatch(bracket.final, 'final')} />
              </BracketColumn>
              <ConnectorStack count={1} champion />
              <ChampionSlot champion={champion} myTeamId={myTeamId} />
            </div>
          </div>
        </div>
      </details>
    </main>
  );
}

function MobilePlayoffHero({ bracket, myTeamId, stage, champion, myNext, onPlayMatch }) {
  const stageText = stage === 'qf' ? 'Quartas' : stage === 'sf' ? 'Semifinais' : 'Final';
  return (
    <section className="mobile-rise" style={{ background:
        'linear-gradient(135deg, rgba(244,165,35,0.10), rgba(255,255,255,0.02) 42%, rgba(25,197,108,0.07))',
      border:'1px solid rgba(244,165,35,0.20)', borderRadius:'var(--r-lg)',
      padding:'14px', boxShadow:'0 12px 26px rgba(0,0,0,0.18)', marginBottom:10 }}>
      <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between',
        gap:12, marginBottom:12 }}>
        <div>
          <div style={{ fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
            color:'var(--text-3)', letterSpacing:'0.13em', textTransform:'uppercase' }}>
            Etapa atual
          </div>
          <div style={{ fontFamily:'var(--font-cond)', fontSize:24, fontWeight:800,
            color:'var(--accent)', lineHeight:1, letterSpacing:'0.04em',
            textTransform:'uppercase' }}>
            {stageText}
          </div>
        </div>
        <div style={{ textAlign:'right' }}>
          <div style={{ fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
            color:'var(--text-3)', letterSpacing:'0.13em', textTransform:'uppercase' }}>
            Formato
          </div>
          <div style={{ fontFamily:'var(--font-mono)', fontSize:18, fontWeight:800,
            color:'var(--text-1)' }}>
            {bracket.matchFormat || 'MR16'}
          </div>
        </div>
      </div>

      {champion ? (
        <div style={{ display:'flex', alignItems:'center', gap:10,
          background:'rgba(25,197,108,0.09)', border:'1px solid rgba(25,197,108,0.22)',
          borderRadius:'var(--r-md)', padding:'10px' }}>
          <TeamToken team={champion} mine={champion.id === myTeamId} current size={40} />
          <div style={{ minWidth:0 }}>
            <div style={{ fontFamily:'var(--font-cond)', fontSize:15, fontWeight:800,
              color:champion.id === myTeamId ? 'var(--accent)' : '#d9ffe7',
              whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>
              {teamName(champion)}
            </div>
            <div style={{ fontSize:10, color:'var(--text-3)' }}>campeão definido</div>
          </div>
        </div>
      ) : myNext ? (
        <button data-sound="match" onClick={() => onPlayMatch(myNext, stage)}
          className="mobile-pulse"
          style={{ width:'100%', display:'grid', gridTemplateColumns:'1fr auto 1fr',
            alignItems:'center', gap:8, padding:'11px 10px 10px',
            background:'rgba(244,165,35,0.12)', border:'1px solid rgba(244,165,35,0.34)',
            borderRadius:'var(--r-md)', cursor:'pointer', color:'var(--text-1)' }}>
          <MobileVersusTeam team={myNext.teamA} mine={myNext.teamA?.id === myTeamId} />
          <span style={{ fontFamily:'var(--font-cond)', fontSize:12, fontWeight:800,
            color:'var(--accent)', letterSpacing:'0.12em' }}>VS</span>
          <MobileVersusTeam team={myNext.teamB} mine={myNext.teamB?.id === myTeamId} right />
          <span style={{ gridColumn:'1 / -1', marginTop:8, paddingTop:9,
            borderTop:'1px solid rgba(244,165,35,0.22)',
            fontFamily:'var(--font-cond)', fontSize:12, fontWeight:900,
            color:'var(--accent)', letterSpacing:'0.14em',
            textTransform:'uppercase', textAlign:'center' }}>
            Iniciar partida →
          </span>
        </button>
      ) : (
        <div style={{ padding:'10px', background:'var(--bg-3)',
          border:'1px solid var(--border-2)', borderRadius:'var(--r-md)',
          color:'var(--text-3)', fontSize:12 }}>
          Aguardando os confrontos desta etapa.
        </div>
      )}
    </section>
  );
}

function MobileVersusTeam({ team, mine, right }) {
  return (
    <div style={{ display:'flex', alignItems:'center', gap:8,
      justifyContent:right ? 'flex-end' : 'flex-start', minWidth:0 }}>
      {!right && <TeamToken team={team} mine={mine} size={34} />}
      <div style={{ minWidth:0, textAlign:right ? 'right' : 'left' }}>
        <div style={{ fontFamily:'var(--font-cond)', fontSize:14, fontWeight:800,
          color:mine ? 'var(--accent)' : 'var(--text-1)', whiteSpace:'nowrap',
          overflow:'hidden', textOverflow:'ellipsis' }}>
          {teamName(team)}
        </div>
        <div style={{ fontSize:9, color:'var(--text-3)' }}>
          {team?.year || 'Mix'}
        </div>
      </div>
      {right && <TeamToken team={team} mine={mine} size={34} />}
    </div>
  );
}

function MobilePlayoffPath({ bracket, myTeamId, activeIndex }) {
  const stages = [
    ['qf', 'Quartas', bracket.qf],
    ['sf', 'Semis', bracket.sf],
    ['final', 'Final', [bracket.final]],
  ];
  return (
    <section className="mobile-rise" style={{ background:'var(--bg-2)',
      border:'1px solid var(--border-2)', borderRadius:'var(--r-lg)', padding:'12px 13px' }}>
      <div style={{ fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
        color:'var(--text-3)', letterSpacing:'0.13em', textTransform:'uppercase', marginBottom:10 }}>
        Caminho até o título
      </div>
      <div style={{ display:'grid', gap:7 }}>
        {stages.map(([id, label, matches], index) => {
          const match = matches.find(m => m.teamA?.id === myTeamId || m.teamB?.id === myTeamId);
          const winner = getWinner(match);
          const won = winner?.id === myTeamId;
          const lost = match?.result && !won;
          const opponent = match?.teamA?.id === myTeamId ? match.teamB : match?.teamB?.id === myTeamId ? match.teamA : null;
          const active = index === activeIndex;
          return (
            <div key={id} style={{ display:'grid', gridTemplateColumns:'58px minmax(0,1fr) auto',
              alignItems:'center', gap:9, padding:'8px 9px',
              background:active ? 'rgba(244,165,35,0.10)' : won ? 'rgba(25,197,108,0.08)' : 'var(--bg-3)',
              border:`1px solid ${active ? 'rgba(244,165,35,0.28)' : won ? 'rgba(25,197,108,0.18)' : 'var(--border-2)'}`,
              borderRadius:'var(--r-sm)' }}>
              <span style={{ fontFamily:'var(--font-cond)', fontSize:10, fontWeight:800,
                color:active ? 'var(--accent)' : 'var(--text-3)', letterSpacing:'0.1em',
                textTransform:'uppercase' }}>
                {label}
              </span>
              <span style={{ minWidth:0, color:'var(--text-2)', fontSize:12,
                whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>
                {opponent ? `vs ${teamName(opponent)}` : 'aguardando'}
              </span>
              <span style={{ fontFamily:'var(--font-cond)', fontSize:10, fontWeight:800,
                color:won ? '#5aad5c' : lost ? '#d46a6a' : active ? 'var(--accent)' : 'var(--text-3)',
                letterSpacing:'0.1em', textTransform:'uppercase' }}>
                {won ? 'venceu' : lost ? 'caiu' : active ? 'agora' : '-'}
              </span>
            </div>
          );
        })}
      </div>
    </section>
  );
}

function playoffStageIndex(stage) {
  return stage === 'sf' ? 1 : stage === 'final' ? 2 : 0;
}

function findMyPlayableMatch(bracket, stage, myTeamId) {
  const matches = stage === 'sf' ? bracket.sf : stage === 'final' ? [bracket.final] : bracket.qf;
  return matches.find(m => !m.result && m.teamA && m.teamB
    && (m.teamA.id === myTeamId || m.teamB.id === myTeamId));
}

function StageTabs({ stage }) {
  return (
    <div style={{ display:'flex', alignItems:'center', gap:8 }}>
      {[
        ['qf','QUARTAS'],
        ['sf','SEMIS'],
        ['final','FINAL'],
      ].map(([id, label]) => {
        const active = id === stage;
        return (
          <span key={id} style={{ padding:'8px 14px',
            background:active ? 'rgba(244,165,35,0.12)' : 'transparent',
            border:`1px solid ${active ? 'rgba(244,165,35,0.35)' : 'var(--border-2)'}`,
            borderRadius:'var(--r-sm)', fontFamily:'var(--font-cond)', fontSize:10,
            fontWeight:800, letterSpacing:'0.12em', color:active ? 'var(--accent)' : 'var(--text-3)' }}>
            {label}
          </span>
        );
      })}
    </div>
  );
}

function BracketColumn({ title, subtitle, children, compact = false, finalCol = false }) {
  return (
    <div style={{ display:'grid', gap: finalCol ? 0 : compact ? 72 : 16,
      alignContent:'center', minHeight: finalCol ? 490 : compact ? 520 : 620 }}>
      <div style={{ alignSelf:'start', marginBottom: finalCol ? 16 : 0 }}>
        <div style={{ fontFamily:'var(--font-cond)', fontSize:12, fontWeight:800,
          color:'rgba(226,238,226,0.68)', letterSpacing:'0.13em',
          textTransform:'uppercase', textAlign:'center' }}>
          {title}
        </div>
        <div style={{ marginTop:2, fontFamily:'var(--font-cond)', fontSize:9,
          fontWeight:800, color:'rgba(226,238,226,0.34)', letterSpacing:'0.12em',
          textTransform:'uppercase', textAlign:'center' }}>
          {subtitle}
        </div>
      </div>
      {children}
    </div>
  );
}

function ConnectorStack({ count, tall = false, champion = false }) {
  return (
    <div style={{ display:'flex', flexDirection:'column', justifyContent:'space-around',
      alignItems:'center', minHeight: champion ? 180 : tall ? 500 : 620, paddingTop:46 }}>
      {Array.from({ length:count }).map((_, i) => (
        <div key={i} style={{ width:46, height:tall ? 82 : champion ? 42 : 46,
          display:'flex', alignItems:'center', justifyContent:'center', position:'relative' }}>
          <span style={{ position:'absolute', left:0, right:0, top:'50%', height:2,
            background:'linear-gradient(90deg, rgba(226,238,226,0.14), rgba(25,197,108,0.72))' }} />
          <span style={{ position:'relative', width:20, height:20, borderRadius:'50%',
            background:'#19c56c', boxShadow:'0 0 18px rgba(25,197,108,0.24)',
            clipPath:'polygon(18% 8%, 100% 50%, 18% 92%, 42% 50%)' }} />
        </div>
      ))}
    </div>
  );
}

function BracketCard({ match, myTeamId, stage, currentStage, onPlay }) {
  const [hov, setHov] = useStM(false);
  const isMobile = window.useIsMobileView?.(760) || false;
  const isCurrentStage = stage === currentStage;
  const isMyMatch = match.teamA?.id === myTeamId || match.teamB?.id === myTeamId;
  const isPlayable = isCurrentStage && isMyMatch && match.teamA && match.teamB && !match.result;
  const isDone = !!match.result;
  const isPending = !match.teamA || !match.teamB;
  const winner = getWinner(match);

  const border = isPlayable ? 'rgba(244,165,35,0.72)'
    : isDone ? 'rgba(25,197,108,0.38)'
    : isPending ? 'rgba(226,238,226,0.14)'
    : 'rgba(94,151,111,0.20)';

  return (
    <div
      data-sound={isPlayable ? 'match' : undefined}
      onClick={isPlayable ? onPlay : undefined}
      onMouseEnter={() => setHov(true)}
      onMouseLeave={() => setHov(false)}
      style={{ padding:10, minHeight:126,
        background:isPlayable && hov ? 'rgba(30,88,58,0.96)' : 'rgba(7,34,24,0.78)',
        border:`2px solid ${border}`, borderRadius:'var(--r-sm)',
        cursor:isPlayable ? 'pointer' : 'default',
        boxShadow:isPlayable ? '0 0 0 2px rgba(244,165,35,0.12)' : 'inset 0 0 24px rgba(0,0,0,0.16)',
        transition:'background 140ms ease, border-color 140ms ease' }}>
      <div style={{ display:'flex', alignItems:'center', justifyContent:'space-between',
        gap:8, marginBottom:8 }}>
        <span style={{ fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
          color:isPlayable ? 'var(--accent)' : 'rgba(226,238,226,0.58)',
          letterSpacing:'0.12em', textTransform:'uppercase' }}>
          {stageLabel(stage)} - BO{match.bo}
        </span>
        <span style={{ fontFamily:'var(--font-cond)', fontSize:9, fontWeight:800,
          color:isDone ? '#19c56c' : isPending ? 'rgba(226,238,226,0.30)' : 'rgba(226,238,226,0.42)',
          letterSpacing:'0.1em', textTransform:'uppercase' }}>
          {isDone ? 'finalizado' : isPlayable ? 'sua partida' : isPending ? 'aguardando' : 'definido'}
        </span>
      </div>

      <BracketTeamRow team={match.teamA} side="A" match={match}
        isWinner={winner?.id === match.teamA?.id}
        isElim={isDone && winner?.id !== match.teamA?.id}
        isMyTeam={match.teamA?.id === myTeamId} />
      <div style={{ height:1, background:'rgba(226,238,226,0.08)', margin:'6px 0' }} />
      <BracketTeamRow team={match.teamB} side="B" match={match}
        isWinner={winner?.id === match.teamB?.id}
        isElim={isDone && winner?.id !== match.teamB?.id}
        isMyTeam={match.teamB?.id === myTeamId} />

      {isPlayable && (
        <button type="button" data-sound="match" onClick={(event) => {
          event.stopPropagation();
          onPlay?.();
        }} style={{ width:'100%', marginTop:9,
          padding:isMobile ? '10px 12px' : '8px 0',
          border:'1px solid rgba(244,165,35,0.38)',
          borderRadius:'var(--r-md)',
          background:isMobile ? 'var(--accent)' : 'rgba(244,165,35,0.10)',
          cursor:'pointer',
          fontFamily:'var(--font-cond)', fontSize:11, fontWeight:800,
          color:isMobile ? '#15110a' : 'var(--accent)',
          letterSpacing:'0.12em', textAlign:'center',
          textTransform:'uppercase' }}>
          Iniciar partida →
        </button>
      )}
    </div>
  );
}

function BracketTeamRow({ team, side, match, isWinner, isElim, isMyTeam }) {
  if (!team) {
    return (
      <div style={{ display:'grid', gridTemplateColumns:'32px minmax(0,1fr) 34px',
        alignItems:'center', gap:8, minHeight:36, opacity:0.55 }}>
        <span style={{ width:28, height:28, borderRadius:'50%',
          border:'1px dashed rgba(226,238,226,0.22)', display:'inline-flex',
          alignItems:'center', justifyContent:'center', color:'rgba(226,238,226,0.30)',
          fontFamily:'var(--font-mono)', fontSize:10 }}>?</span>
        <span style={{ fontFamily:'var(--font-cond)', fontSize:13, fontWeight:800,
          color:'rgba(226,238,226,0.42)', letterSpacing:'0.04em' }}>
          Aguardando vencedor
        </span>
        <span />
      </div>
    );
  }

  const score = scoreForSide(match, side);
  return (
    <div style={{ display:'grid', gridTemplateColumns:'32px minmax(0,1fr) 34px',
      alignItems:'center', gap:8, minHeight:38, padding:'3px 5px 3px 3px',
      borderRadius:'var(--r-sm)',
      background:isWinner ? 'rgba(25,197,108,0.12)' : isMyTeam ? 'rgba(244,165,35,0.10)' : 'transparent',
      opacity:isElim ? 0.42 : 1 }}>
      <TeamToken team={team} mine={isMyTeam} current={isWinner} size={30} />
      <div style={{ minWidth:0 }}>
        <div style={{ fontFamily:'var(--font-cond)', fontSize:15, fontWeight:800,
          lineHeight:1, color:isMyTeam ? 'var(--accent)' : isWinner ? '#d9ffe7' : 'rgba(241,246,239,0.88)',
          whiteSpace:'nowrap', overflow:'hidden', textOverflow:'ellipsis' }}>
          {teamName(team)}
          {isMyTeam && <span style={{ marginLeft:5, fontSize:9, color:'var(--accent)' }}>MEU</span>}
        </div>
        <div style={{ marginTop:2, fontFamily:'var(--font-mono)', fontSize:8,
          color:'rgba(226,238,226,0.38)', whiteSpace:'nowrap', overflow:'hidden',
          textOverflow:'ellipsis' }}>
          {team.year || 'Mix'} · OVR {team.overall || '-'}
        </div>
      </div>
      <span style={{ fontFamily:'var(--font-mono)', fontSize:17, fontWeight:800,
        color:score != null ? isWinner ? '#19c56c' : '#d15760' : 'rgba(226,238,226,0.32)',
        textAlign:'right' }}>
        {score != null ? score : '-'}
      </span>
    </div>
  );
}

function ChampionSlot({ champion, myTeamId }) {
  return (
    <div style={{ alignSelf:'center', padding:12, minHeight:156,
      background:champion ? 'rgba(15,105,76,0.88)' : 'rgba(7,34,24,0.72)',
      border:`2px solid ${champion ? 'rgba(25,197,108,0.46)' : 'rgba(226,238,226,0.14)'}`,
      borderRadius:'var(--r-sm)', display:'flex', flexDirection:'column',
      justifyContent:'center', alignItems:'center', textAlign:'center' }}>
      <div style={{ fontFamily:'var(--font-cond)', fontSize:12, fontWeight:800,
        color:champion ? '#a8ffcd' : 'rgba(226,238,226,0.44)',
        letterSpacing:'0.13em', textTransform:'uppercase', marginBottom:12 }}>
        Campeão
      </div>
      {champion ? (
        <>
          <TeamToken team={champion} mine={champion.id === myTeamId} current size={54} />
          <div style={{ marginTop:10, fontFamily:'var(--font-cond)', fontSize:20,
            fontWeight:800, color:champion.id === myTeamId ? 'var(--accent)' : '#e7f3e9',
            whiteSpace:'nowrap', maxWidth:'100%', overflow:'hidden', textOverflow:'ellipsis' }}>
            {teamName(champion)}
          </div>
        </>
      ) : (
        <div style={{ fontFamily:'var(--font-cond)', fontSize:14, fontWeight:800,
          color:'rgba(226,238,226,0.40)', letterSpacing:'0.04em' }}>
          Aguardando final
        </div>
      )}
    </div>
  );
}

function getWinner(match) {
  if (!match?.result) return null;
  return match.result.winner === 'A' ? match.teamA : match.teamB;
}

function scoreForSide(match, side) {
  if (!match?.result) return null;
  if (match.result.bo > 1) return side === 'A' ? match.result.wA : match.result.wB;
  return side === 'A' ? match.result.scoreA : match.result.scoreB;
}

function stageLabel(stage) {
  return stage === 'qf' ? 'Quartas' : stage === 'sf' ? 'Semifinal' : 'Final';
}

function teamName(team) {
  if (!team) return 'Aguardando';
  if (team.id === 'my_team') return team.name || 'Meu Time';
  return PLAYOFF_TEAM_NAMES[team.id] || team.name || 'Time';
}

function TeamToken({ team, mine = false, current = false, size = 34 }) {
  const color = team?.color || (mine ? 'var(--accent)' : '#8a9cb4');
  const textColor = tokenTextColor(color);
  return (
    <span title={`${team?.name || 'Time'} ${team?.year || ''}`}
      style={{ position:'relative', width:size, height:size, borderRadius:'50%',
        display:'inline-flex', alignItems:'center', justifyContent:'center',
        flexShrink:0, color:textColor,
        background:`radial-gradient(circle at 35% 28%, rgba(255,255,255,0.38), transparent 24%), ${color}`,
        border:`2px solid ${mine ? 'var(--accent)' : current ? '#d9f2d1' : 'rgba(255,255,255,0.22)'}`,
        boxShadow:mine || current ? '0 0 0 3px rgba(244,165,35,0.14)' : '0 2px 6px rgba(0,0,0,0.24)',
        fontFamily:'var(--font-cond)', fontWeight:800,
        fontSize:Math.max(10, Math.round(size * 0.34)), letterSpacing:'0.04em',
        textTransform:'uppercase' }}>
      {initials(team?.name || 'T')}
      <span style={{ position:'absolute', right:-3, bottom:-3, width:Math.max(13, Math.round(size * 0.42)),
        height:Math.max(13, Math.round(size * 0.42)), borderRadius:'50%',
        background:'rgba(30,20,12,0.74)', display:'flex', alignItems:'center', justifyContent:'center',
        border:'1px solid rgba(255,239,191,0.38)' }}>
        <window.Flag value={team?.region?.split(' ')[0] || '🌍'} size={Math.max(10, Math.round(size * 0.32))} />
      </span>
    </span>
  );
}

function initials(name) {
  const clean = String(name || 'T').replace(/[^a-z0-9\s]/gi, ' ').trim();
  const parts = clean.split(/\s+/).filter(Boolean);
  if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase();
  return clean.slice(0, 2).toUpperCase() || 'T';
}

function tokenTextColor(color) {
  const hex = String(color || '').trim();
  if (!/^#[0-9a-f]{6}$/i.test(hex)) return '#f4ead8';
  const r = parseInt(hex.slice(1, 3), 16);
  const g = parseInt(hex.slice(3, 5), 16);
  const b = parseInt(hex.slice(5, 7), 16);
  const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
  return luminance > 0.62 ? '#132019' : '#f4ead8';
}

window.MajorView = MajorView;
