/* HTD Program 6 — Challenge & Crew */
(function () {
  const { useState } = React;
  const Icon = window.HTDIcon;
  const { useNav, PushView, SectionLabel, Panel, UTabs, Avatar } = window.HTDUI;
  const F = window.HTD_FIX;

  function HeroCard({ onJoin, onOpen }) {
    const h = F.challenges.hero;
    return (
      <div style={{ borderRadius:'var(--r-lg)', overflow:'hidden', border:'1px solid var(--hairline-2)',
        background:'linear-gradient(150deg,#1a1f14,#070806 70%)', position:'relative', marginTop:6 }}>
        <image-slot id="hero-htd30" placeholder="Drop the HTD 30 hero shot" shape="rect"
          style={{ position:'absolute', inset:0, width:'100%', height:'100%', opacity:.55 }}></image-slot>
        <div style={{ position:'absolute', inset:0, pointerEvents:'none',
          background:'linear-gradient(165deg, rgba(7,8,6,0.25), rgba(7,8,6,0.92) 78%), radial-gradient(circle at 80% 10%, rgba(152,255,16,0.10), transparent 50%)' }} />
        <div style={{ position:'relative', padding:18, pointerEvents:'none' }}>
          <div className="row between" style={{ alignItems:'flex-start' }}>
            <button onClick={onOpen} style={{ pointerEvents:'auto', cursor:'pointer', background:'none', border:'none', padding:0, textAlign:'left',
              fontFamily:'var(--display)', fontWeight:700, fontSize:54, lineHeight:.85, color:'var(--bone)', letterSpacing:1 }}>HTD<br/>30</button>
            <div style={{ border:'1px solid var(--hairline-2)', borderRadius:'var(--r)', padding:'8px 14px', textAlign:'center', background:'rgba(0,0,0,0.45)' }}>
              <div className="label-mono">STARTS IN</div>
              <div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:30, color:'var(--bone)', lineHeight:1 }}>{String(h.startsIn).padStart(2,'0')}</div>
              <div className="label-mono">DAYS</div>
            </div>
          </div>
          <div className="display-lg acid" style={{ fontSize:18, marginTop:14 }}>{h.tagline}</div>
          <div className="muted" style={{ fontSize:13, marginTop:4 }}>{h.sub}</div>
          <div className="row between" style={{ marginTop:16 }}>
            <span className="label-mono acid">JOIN {h.athletes} ATHLETES</span>
            <button onClick={e=>{e.stopPropagation(); onJoin();}} className="btn-primary" style={{ pointerEvents:'auto', width:'auto', padding:'11px 18px', fontSize:14 }}>JOIN CHALLENGE</button>
          </div>
        </div>
      </div>
    );
  }

  function LiveRow({ c, onClick }) {
    return (
      <button onClick={onClick} className="row between panel" style={{ padding:'14px', marginTop:10, cursor:'pointer', width:'100%' }}>
        <div className="row" style={{ gap:12 }}>
          <div style={{ width:38, height:38, borderRadius:8, background:'var(--raised-2)', border:'1px solid var(--hairline-2)', display:'grid', placeItems:'center' }}>
            <Icon name={c.icon} size={19} color="var(--amber)" /></div>
          <div style={{ textAlign:'left' }}>
            <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:16, letterSpacing:.3 }}>{c.name}</div>
            <div className="label-mono" style={{ textTransform:'none', letterSpacing:.3, marginTop:2 }}>{c.dates? c.dates+' · ':''}{c.desc}</div>
          </div>
        </div>
        <span className="label-mono danger-c" style={{ display:'flex', alignItems:'center', gap:5 }}>
          <span style={{ width:6, height:6, borderRadius:'50%', background:'var(--danger)', boxShadow:'0 0 6px var(--danger)' }} />LIVE</span>
      </button>
    );
  }

  function LeaderboardPanel({ rows, total, onFull }) {
    return (
      <Panel pad={false} style={{ marginTop:16 }}>
        <div className="row between" style={{ padding:'13px 14px', borderBottom:'1px solid var(--hairline)' }}>
          <span className="label-mono" style={{ color:'var(--bone)', fontSize:11 }}>GLOBAL LEADERBOARD</span>
          <span className="num-mono" style={{ fontSize:12, color:'var(--steel)' }}>{total}</span></div>
        {rows.slice(0,5).map(([rank,name,pts],i)=>(
          <div key={i} className="row between" style={{ padding:'12px 14px', borderBottom: i<4?'1px solid var(--hairline)':'none' }}>
            <div className="row" style={{ gap:14 }}>
              <span className="num-mono" style={{ fontSize:13, color: i===0?'var(--acid)':'var(--steel)', width:14 }}>{rank}</span>
              <span style={{ fontFamily:'var(--ui)', fontWeight:600, fontSize:14, color:'var(--bone)' }}>{name}</span></div>
            <span className="num-mono" style={{ fontSize:13, color:'var(--bone-muted)' }}>{pts}</span></div>))}
        {onFull && <button onClick={onFull} className="label-mono" style={{ width:'100%', padding:'14px', background:'none', border:'none', borderTop:'1px solid var(--hairline)', color:'var(--bone-muted)', cursor:'pointer', letterSpacing:2 }}>VIEW FULL LEADERBOARD</button>}
      </Panel>
    );
  }

  // tab-root Challenge Hub (mock #03)
  function ChallengeHub({ tweaks }) {
    const nav = useNav();
    const [tab, setTab] = useState('DISCOVER');
    return (
      <div className="screen-enter">
        <UTabs items={['DISCOVER','MINE','CREWS','LEAGUE']} value={tab} onChange={setTab} style={{ marginBottom:10 }} />
        {tab==='DISCOVER' && <>
          <button onClick={()=>nav.push('WorldDay')} className="row between panel" style={{ width:'100%', padding:'13px 14px', marginTop:6, cursor:'pointer',
            borderColor:'var(--border-active)', boxShadow:'0 0 16px -10px var(--acid-glow)' }}>
            <div className="row" style={{ gap:11 }}>
              <Icon name="gps" size={19} color="var(--acid)" />
              <div style={{ textAlign:'left' }}>
                <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:15 }}>HTD WORLD DAY · JUNE 21</div>
                <div className="label-mono" style={{ marginTop:2 }}>2.4M IN · 1,904 CITIES · ONE MISSION</div></div></div>
            <span className="label-mono acid">11D ›</span>
          </button>
          <HeroCard onJoin={()=>nav.push('ChallengeDetail')} onOpen={()=>nav.push('ChallengeDetail')} />
          {F.challenges.live.map((c,i)=><LiveRow key={i} c={c} onClick={()=> c.name==='GYM VS GYM' ? nav.push('GymChapter') : nav.push('ChallengeDetail',{c})} />)}
          <window.HTDCatalog.CatalogShelves />
          <LeaderboardPanel rows={F.challenges.leaderboard} total={F.challenges.total} onFull={()=>nav.push('LeaderboardDetail')} />
        </>}
        {tab==='MINE' && <div style={{ paddingTop:6 }}>
          <Panel glow style={{ marginTop:4 }}><div className="row between"><div>
            <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:18 }}>HTD 30</div>
            <div className="label-mono" style={{ marginTop:3 }}>DAY 18 / 30 · ON TRACK</div></div>
            <div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:26, color:'var(--acid)' }}>#2</div></div>
            <div style={{ height:6, borderRadius:3, background:'var(--raised-2)', marginTop:12, overflow:'hidden' }}>
              <div style={{ width:'60%', height:'100%', background:'var(--acid)' }} /></div></Panel>
          <SectionLabel>UPCOMING</SectionLabel>
          {F.challenges.live.map((c,i)=><LiveRow key={i} c={c} onClick={()=>nav.push('ChallengeDetail',{c})} />)}
        </div>}
        {tab==='CREWS' && <CrewHome empty={tweaks && tweaks.emptyStates} />}
        {tab==='LEAGUE' && <window.HTDGrowth.LeagueBoard />}
      </div>
    );
  }

  function ChallengeDetail({ params }) {
    const nav = useNav(); const d = F.challenges.detail;
    const [joined, setJoined] = useState(false);
    const foot = (<div className="row" style={{ gap:10 }}>
      <button className={joined?'btn-ghost':'btn-primary'} onClick={()=>setJoined(j=>!j)}>{joined?'JOINED · DAY 0':'JOIN CHALLENGE'}</button>
      <button className="btn-ghost" style={{ width:'auto', padding:'0 18px' }} onClick={()=>window.HTDUI.toast('CHALLENGE INVITE LINK COPIED')}>INVITE</button></div>);
    return (
      <PushView title="CHALLENGE" right={['share']} footer={foot}>
        <div style={{ marginTop:8, borderRadius:'var(--r-lg)', overflow:'hidden', border:'1px solid var(--hairline-2)',
          background:'linear-gradient(150deg,#1a1f14,#070806 70%)', padding:18 }}>
          <div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:46, lineHeight:.9, color:'var(--bone)' }}>HTD 30</div>
          <div className="display-lg acid" style={{ fontSize:16, marginTop:8 }}>30 DAYS. NO EXCUSES.</div>
        </div>
        <div style={{ display:'grid', gridTemplateColumns:'1fr 1fr', gap:10, marginTop:12 }}>
          <Panel><div className="label-mono">DURATION</div><div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:20, marginTop:4 }}>{d.duration}</div></Panel>
          <Panel><div className="label-mono">PARTICIPANTS</div><div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:20, marginTop:4 }}>{d.participants}</div></Panel>
        </div>
        <SectionLabel>RULES</SectionLabel>
        <Panel pad={false}>{d.rules.map((r,i)=>(<div key={i} className="row" style={{ gap:11, padding:'12px 14px', borderBottom:i<d.rules.length-1?'1px solid var(--hairline)':'none' }}>
          <Icon name="check" size={15} color="var(--acid)" /><span style={{ fontSize:13.5, color:'var(--bone-muted)' }}>{r}</span></div>))}</Panel>
        <SectionLabel>PROOF STANDARD</SectionLabel>
        <Panel>{d.proof.map((p,i)=>(<div key={i} className="row" style={{ gap:9, padding:'5px 0' }}>
          <Icon name="shieldCheck" size={16} color="var(--acid)" /><span style={{ fontSize:13.5, color:'var(--bone-muted)' }}>{p}</span></div>))}</Panel>
        <SectionLabel>REWARD</SectionLabel>
        <Panel glow><div className="row" style={{ gap:11 }}><Icon name="trophy" size={20} color="var(--acid)" />
          <span style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:14, color:'var(--bone)' }}>{d.reward}</span></div></Panel>
        <div className="row between" style={{ marginTop:14, padding:'0 2px' }}>
          <span className="label-mono">REQUIRED PLAN</span><span className="label-mono acid">{d.plan}</span></div>
      </PushView>
    );
  }

  function LeaderboardDetail() {
    const [filter, setFilter] = useState('GLOBAL');
    return (
      <PushView title="LEADERBOARD">
        <div className="seg" style={{ flexWrap:'wrap', marginTop:6 }}>
          {['GLOBAL','CREW','FRIENDS','GYM','PERSONA'].map(f=>(
            <button key={f} className={'seg-item'+(filter===f?' active':'')} onClick={()=>setFilter(f)}>{f}</button>))}</div>
        <Panel pad={false} style={{ marginTop:14 }}>
          {F.challenges.leaderboard.map(([rank,name,pts],i)=>(
            <div key={i} className="row between" style={{ padding:'13px 14px', borderBottom:i<F.challenges.leaderboard.length-1?'1px solid var(--hairline)':'none',
              background: name==='IRONCROWN'?'rgba(152,255,16,0.05)':'transparent' }}>
              <div className="row" style={{ gap:14 }}>
                <span className="num-mono" style={{ fontSize:14, color: i<3?'var(--acid)':'var(--steel)', width:18 }}>{rank}</span>
                <div><div style={{ fontFamily:'var(--ui)', fontWeight:600, fontSize:14.5, color:'var(--bone)' }}>{name}</div>
                  <div className="label-mono" style={{ marginTop:2 }}>96% PROOF · 18D STREAK</div></div></div>
              <div style={{ textAlign:'right' }}><div className="num-mono" style={{ fontSize:14, color:'var(--bone-muted)' }}>{pts}</div>
                <div className="label-mono acid">▲ +{12-i}</div></div></div>))}
        </Panel>
      </PushView>
    );
  }

  // tab-root Crew Home
  function CrewHome({ empty }) {
    const nav = useNav();
    const toast = window.HTDUI.toast;
    const [created, setCreated] = useState(false);
    const crews = [['IRONCROWN','12 MEMBERS · RANK #3',78],['DAWN PATROL','6 MEMBERS · RANK #11',91]];
    if (empty && !created) return (
      <div className="screen-enter" style={{ textAlign:'center', padding:'56px 26px 0' }}>
        <div style={{ width:60, height:60, borderRadius:14, margin:'0 auto 18px', border:'1px solid var(--hairline-2)', display:'grid', placeItems:'center' }}>
          <Icon name="crew" size={26} color="var(--steel)" /></div>
        <div className="display-lg" style={{ fontSize:22 }}>NO CREW YET</div>
        <div className="muted" style={{ fontSize:13.5, marginTop:10, lineHeight:1.5 }}>Discipline is contagious. A crew makes missing harder than showing up.</div>
        <button className="btn-primary" style={{ marginTop:22 }} onClick={()=>{ setCreated(true); toast('CREW CREATED · INVITE CODE IRON-9X4'); }}>+ CREATE CREW</button>
        <button className="btn-ghost" style={{ marginTop:10 }} onClick={()=>toast('ENTER CODE · ASK YOUR CREW LEAD')}>JOIN WITH CODE</button>
      </div>
    );
    return (
      <div className="screen-enter" style={{ paddingTop:6 }}>
        <div className="row" style={{ gap:10 }}>
          <button className="btn-primary" style={{ fontSize:14 }} onClick={()=>toast('CREW CREATED · INVITE CODE SENT')}>+ CREATE CREW</button>
          <button className="btn-ghost" style={{ width:'auto', padding:'0 18px' }} onClick={()=>toast('ENTER CODE · ASK YOUR CREW LEAD')}>JOIN CODE</button>
        </div>
        <SectionLabel>MY CREWS</SectionLabel>
        {crews.map(([name,sub,pct],i)=>(
          <button key={i} onClick={()=>nav.push('CrewBoard',{name})} className="panel panel-pad row between" style={{ width:'100%', marginBottom:10, cursor:'pointer' }}>
            <div className="row" style={{ gap:12 }}>
              <div style={{ width:40, height:40, borderRadius:9, background:'var(--raised-2)', border:'1px solid var(--hairline-2)', display:'grid', placeItems:'center' }}>
                <Icon name="shield" size={20} color="var(--bone-muted)" /></div>
              <div style={{ textAlign:'left' }}><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:17 }}>{name}</div>
                <div className="label-mono" style={{ marginTop:2 }}>{sub}</div></div></div>
            <div style={{ textAlign:'right' }}><div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:22, color:'var(--acid)' }}>{pct}%</div>
              <div className="label-mono">AVG</div></div>
          </button>))}
        <SectionLabel>CREW CHALLENGE</SectionLabel>
        <Panel glow><div className="row between"><div style={{ minWidth:0, paddingRight:10 }}><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:16, lineHeight:1.2 }}>IRONCROWN vs RELENTLESS</div>
          <div className="label-mono" style={{ marginTop:5 }}>ENDS IN 3 DAYS · YOU LEAD +1,240</div></div>
          <Icon name="trophy" size={22} color="var(--acid)" /></div></Panel>
      </div>
    );
  }

  function CrewBoard({ params }) {
    const nav = useNav();
    const name = (params&&params.name)||'IRONCROWN';
    const toast = window.HTDUI.toast;
    const [nudged, setNudged] = useState({});
    const members = [['DANIEL K.','#3a4a2a',100],['JESSICA M.','#4a2a2a',92],['ALEX R.','#2a3a4a',88],['MARCUS T.','#4a3a2a',64],['YOU','#3a4a2a',78]];
    return (
      <PushView title={name} right={['more']}>
        <Panel glow style={{ marginTop:8 }}>
          <div className="row between"><div><div className="label-mono">CREW RANK</div>
            <div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:34, color:'var(--acid)', lineHeight:1, marginTop:2 }}>#3</div></div>
            <div style={{ textAlign:'right' }}><div className="label-mono">AVG COMPLETION</div>
              <div style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:34, lineHeight:1, marginTop:2 }}>78%</div></div></div>
        </Panel>
        <div className="panel panel-pad row between" style={{ marginTop:10 }}>
          <div><div className="label-mono">INVITE CODE</div><div className="num-mono" style={{ fontSize:18, color:'var(--bone)', letterSpacing:3, marginTop:2 }}>IRON-9X4</div></div>
          <button className="btn-ghost" style={{ width:'auto', padding:'9px 14px', fontSize:12 }} onClick={()=>toast('CODE COPIED · IRON-9X4')}>COPY</button></div>
        <button onClick={()=>nav.push('CrewCheckin')} className="panel panel-pad row between" style={{ width:'100%', marginTop:10, cursor:'pointer', borderColor:'var(--border-active)' }}>
          <div className="row" style={{ gap:11 }}>
            <Icon name="comment" size={18} color="var(--acid)" />
            <div style={{ textAlign:'left' }}><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:15 }}>DAILY CHECK-IN</div>
              <div className="label-mono" style={{ marginTop:2 }}>9/12 IN · 1 STRUGGLING · BACK HIM UP</div></div></div>
          <Icon name="chevronRight" size={18} color="var(--acid)" />
        </button>
        <SectionLabel>MEMBER COMPLETION · TODAY</SectionLabel>
        <Panel pad={false}>{members.map(([m,col,pct],i)=>(
          <div key={i} className="row" style={{ gap:11, padding:'11px 14px', borderBottom:i<members.length-1?'1px solid var(--hairline)':'none' }}>
            <Avatar color={col} label={m[0]} size={30} />
            <span style={{ flex:1, fontFamily:'var(--ui)', fontWeight:600, fontSize:14, color: m==='YOU'?'var(--acid)':'var(--bone)' }}>{m}</span>
            {pct<70 && m!=='YOU' && <button onClick={()=>{ setNudged(n=>({...n,[m]:true})); toast('NUDGE SENT TO '+m); }}
              className="label-mono" style={{ padding:'5px 9px', borderRadius:5, cursor:'pointer', background:'none',
                border:'1px solid '+(nudged[m]?'var(--border-active)':'var(--hairline-2)'), color: nudged[m]?'var(--acid)':'var(--amber)' }}>
              {nudged[m]?'NUDGED ✓':'NUDGE'}</button>}
            <div style={{ width:64, height:6, borderRadius:3, background:'var(--raised-2)', overflow:'hidden' }}>
              <div style={{ width:pct+'%', height:'100%', background: pct>=90?'var(--acid)':pct>=70?'var(--acid-deep)':'var(--amber)' }} /></div>
            <span className="num-mono" style={{ fontSize:12, color:'var(--bone-muted)', width:32, textAlign:'right' }}>{pct}%</span></div>))}</Panel>
      </PushView>
    );
  }

  window.HTDChallenge = { ChallengeHub, ChallengeDetail, LeaderboardDetail, CrewHome, CrewBoard };
})();
