/* HTD Program 3b — Onboarding (6 steps) + First Mission Reveal */
(function () {
  const { useState } = React;
  const Icon = window.HTDIcon;
  const { useNav } = window.HTDUI;
  const { StatusBar } = window.HTDShell;
  const { HTDMark } = window.HTDAuth;
  const F = window.HTD_FIX;

  function Rail({ step, total }) {
    return (
      <div className="row" style={{ gap:5, padding:'2px 0 16px' }}>
        {Array.from({length: total}).map((_,i)=>(
          <div key={i} style={{ flex:1, height:3, borderRadius:2, background: i<=step?'var(--acid)':'var(--hairline-2)',
            boxShadow: i<=step?'0 0 6px var(--acid-glow)':'none' }} />
        ))}
      </div>
    );
  }

  function StepHead({ kicker, title }) {
    return (<div style={{ marginBottom:18 }}>
      <div className="label-mono acid">{kicker}</div>
      <div className="display-lg" style={{ fontSize:26, marginTop:7 }}>{title}</div>
    </div>);
  }

  function Chip({ label, on, onClick, icon }) {
    return (
      <button onClick={onClick} className="row" style={{ gap:7, height:38, padding:'0 14px', cursor:'pointer',
        background: on?'rgba(152,255,16,0.08)':'var(--panel)', border:'1px solid '+(on?'var(--acid)':'var(--hairline-2)'),
        borderRadius:'var(--r-sm)', color: on?'var(--acid)':'var(--bone-muted)',
        fontFamily:'var(--mono)', fontSize:10.5, letterSpacing:1, textTransform:'uppercase' }}>
        {icon && <Icon name={icon} size={14} color={on?'var(--acid)':'var(--steel)'} />}{label}
      </button>
    );
  }

  function PersonaStep({ sel, set }) {
    return (
      <div style={{ display:'grid', gridTemplateColumns:'1fr 1fr', gap:9 }}>
        {F.onboarding.personas.map(([name,flav,ic])=>{
          const on = sel===name;
          return (
            <button key={name} onClick={()=>set(name)} style={{ textAlign:'left', cursor:'pointer', padding:13,
              background: on?'rgba(152,255,16,0.07)':'var(--panel)', border:'1px solid '+(on?'var(--acid)':'var(--hairline)'),
              borderRadius:'var(--r)', display:'flex', flexDirection:'column', gap:8, minHeight:104,
              boxShadow: on?'0 0 18px -6px var(--acid-glow)':'none' }}>
              <Icon name={ic} size={22} color={on?'var(--acid)':'var(--bone-muted)'} />
              <div style={{ marginTop:'auto' }}>
                <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:15, letterSpacing:.3, color: on?'var(--acid)':'var(--bone)' }}>{name}</div>
                <div className="label-mono" style={{ marginTop:3, textTransform:'none', letterSpacing:.3 }}>{flav}</div>
              </div>
            </button>
          );
        })}
      </div>
    );
  }

  function MultiStep({ options, sel, toggle, icons }) {
    return (
      <div className="row" style={{ flexWrap:'wrap', gap:8 }}>
        {options.map(o => <Chip key={o} label={o} on={sel.includes(o)} onClick={()=>toggle(o)} />)}
      </div>
    );
  }

  function ProofStep({ sel, toggle }) {
    return (
      <div style={{ display:'flex', flexDirection:'column', gap:9 }}>
        {F.onboarding.proofModes.map(([name,ic])=>{
          const on = sel.includes(name);
          return (
            <button key={name} onClick={()=>toggle(name)} className="row between" style={{ cursor:'pointer', padding:'13px 14px',
              background: on?'rgba(152,255,16,0.06)':'var(--panel)', border:'1px solid '+(on?'var(--acid)':'var(--hairline)'), borderRadius:'var(--r)' }}>
              <div className="row" style={{ gap:11 }}>
                <Icon name={ic} size={18} color={on?'var(--acid)':'var(--bone-muted)'} />
                <span style={{ fontFamily:'var(--ui)', fontWeight:600, fontSize:14, color: on?'var(--acid)':'var(--bone)', letterSpacing:.3 }}>{name}</span>
              </div>
              <div style={{ width:20, height:20, borderRadius:5, border:'1px solid '+(on?'var(--acid)':'var(--hairline-2)'),
                background: on?'var(--acid)':'transparent', display:'grid', placeItems:'center' }}>
                {on && <Icon name="check" size={13} color="#0a1400" />}
              </div>
            </button>
          );
        })}
      </div>
    );
  }

  function WearableStep() {
    const [conn, setConn] = useState({});
    return (
      <div style={{ display:'flex', flexDirection:'column', gap:9 }}>
        {F.onboarding.wearables.map(([name,status])=>{
          const c = conn[name];
          const blocked = status==='PROVIDER PENDING';
          return (
            <div key={name} className="row between panel panel-pad">
              <div className="row" style={{ gap:11 }}>
                <Icon name="watch" size={18} color="var(--bone-muted)" />
                <div>
                  <div style={{ fontFamily:'var(--ui)', fontWeight:600, fontSize:14, color:'var(--bone)' }}>{name}</div>
                  <div className="label-mono" style={{ color: blocked?'var(--amber)':'var(--steel)' }}>{c?'CONNECTED':status}</div>
                </div>
              </div>
              <button onClick={()=>!blocked && setConn({...conn,[name]:!c})} disabled={blocked}
                className="label-mono" style={{ padding:'7px 12px', borderRadius:6, cursor: blocked?'not-allowed':'pointer',
                border:'1px solid '+(c?'var(--acid)':'var(--hairline-2)'), background: c?'rgba(152,255,16,0.08)':'transparent',
                color: blocked?'var(--steel)':c?'var(--acid)':'var(--bone-muted)' }}>
                {blocked?'PENDING':c?'LINKED':'CONNECT'}
              </button>
            </div>
          );
        })}
      </div>
    );
  }

  function SafetyStep({ ack, setAck, exposure, setExposure }) {
    return (
      <div>
        {F.safety.points.map(([t,d],i)=>(
          <div key={i} className="panel panel-pad" style={{ marginBottom:10 }}>
            <div className="row" style={{ gap:10, alignItems:'flex-start' }}>
              <Icon name={i===1?'alert':i===2?'droplet':'shield'} size={17} color={i===1?'var(--danger)':'var(--acid)'} style={{ marginTop:1 }} />
              <div><div className="label-mono" style={{ color:'var(--bone)' }}>{t}</div>
                <div className="muted" style={{ fontSize:12.5, marginTop:5, lineHeight:1.5 }}>{d}</div></div>
            </div>
          </div>))}
        <button onClick={()=>setExposure(!exposure)} className="row between panel panel-pad" style={{ width:'100%', cursor:'pointer', marginBottom:10,
          borderColor: exposure?'var(--border-active)':'var(--hairline)' }}>
          <div className="row" style={{ gap:10, alignItems:'flex-start', textAlign:'left' }}>
            <Icon name="flame" size={17} color={exposure?'var(--acid)':'var(--steel)'} style={{ marginTop:1 }} />
            <div><div className="label-mono" style={{ color: exposure?'var(--acid)':'var(--bone)' }}>EXPOSURE ACTIVITIES · OPT-IN</div>
              <div className="muted" style={{ fontSize:12.5, marginTop:5, lineHeight:1.5 }}>{F.safety.exposure}</div></div></div>
          <div style={{ width:20, height:20, borderRadius:5, flex:'0 0 auto', border:'1px solid '+(exposure?'var(--acid)':'var(--hairline-2)'),
            background: exposure?'var(--acid)':'transparent', display:'grid', placeItems:'center' }}>
            {exposure && <Icon name="check" size={13} color="#0a1400" />}</div>
        </button>
        <button onClick={()=>setAck(!ack)} className="row" style={{ width:'100%', gap:11, cursor:'pointer', padding:'14px',
          background: ack?'rgba(152,255,16,0.07)':'var(--panel)', border:'1px solid '+(ack?'var(--acid)':'var(--hairline-2)'), borderRadius:'var(--r)' }}>
          <div style={{ width:22, height:22, borderRadius:6, flex:'0 0 auto', border:'1px solid '+(ack?'var(--acid)':'var(--hairline-2)'),
            background: ack?'var(--acid)':'transparent', display:'grid', placeItems:'center' }}>
            {ack && <Icon name="check" size={14} color="#0a1400" />}</div>
          <span style={{ fontFamily:'var(--ui)', fontWeight:600, fontSize:13.5, color: ack?'var(--acid)':'var(--bone)', textAlign:'left' }}>
            I understand and accept the HTD safety standards.</span>
        </button>
        <div className="label-mono" style={{ marginTop:12, color:'var(--steel)' }}>↳ CONSTRAINTS + RED FLAGS SHAPE MISSION ASSIGNMENT</div>
      </div>
    );
  }

  function CrewStep({ sel, set }) {
    const opts = [['JOIN HTD 30','1.2M athletes locked in','trophy'],['CREATE A CREW','Bring your people','crew'],['ENTER INVITE CODE','Join a private crew','lock']];
    return (
      <div style={{ display:'flex', flexDirection:'column', gap:10 }}>
        {opts.map(([t,s,ic])=>{
          const on = sel===t;
          return (
            <button key={t} onClick={()=>set(t)} className="row between" style={{ cursor:'pointer', padding:'15px 14px',
              background: on?'rgba(152,255,16,0.06)':'var(--panel)', border:'1px solid '+(on?'var(--acid)':'var(--hairline)'), borderRadius:'var(--r)' }}>
              <div className="row" style={{ gap:12 }}>
                <Icon name={ic} size={20} color={on?'var(--acid)':'var(--bone-muted)'} />
                <div style={{ textAlign:'left' }}>
                  <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:16, color: on?'var(--acid)':'var(--bone)', letterSpacing:.3 }}>{t}</div>
                  <div className="label-mono" style={{ textTransform:'none', letterSpacing:.3, marginTop:2 }}>{s}</div>
                </div>
              </div>
              {on && <Icon name="check" size={18} color="var(--acid)" />}
            </button>
          );
        })}
      </div>
    );
  }

  function FirstMission() {
    const nav = useNav(); const t = F.today;
    return (
      <div className="grid-bg" style={{ position:'absolute', inset:0, background:'var(--void)', display:'flex', flexDirection:'column' }}>
        <StatusBar />
        <div className="screen-body" style={{ display:'flex', flexDirection:'column', padding:'8px 22px 30px', justifyContent:'flex-start' }}>
          <div className="screen-enter" style={{ textAlign:'center', marginBottom:18 }}>
            <div className="label-mono acid" style={{ letterSpacing:3 }}>ASSIGNMENT GENERATED</div>
            <div className="display-lg" style={{ fontSize:24, marginTop:8 }}>YOUR FIRST MISSION</div>
          </div>
          <div className="panel panel-glow panel-pad screen-enter scan-host" style={{ padding:18 }}>
            <div className="label-mono">{t.label}</div>
            <div className="display-xl" style={{ fontSize:34, margin:'8px 0 6px' }}>{t.title}</div>
            <div className="muted" style={{ fontSize:13.5, marginBottom:14 }}>{t.subtitle}</div>
            <div className="row" style={{ gap:8, marginBottom:16 }}>{t.tags.map(x=><span key={x} className="chip">{x}</span>)}</div>
            <div className="row between" style={{ borderTop:'1px solid var(--hairline)', paddingTop:13 }}>
              <div><div className="label-mono">DURATION</div><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:17 }}>{t.duration}</div></div>
              <div><div className="label-mono">DIFFICULTY</div><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:17, color:'var(--danger)' }}>{t.difficulty.toFixed(1)}/10</div></div>
              <div><div className="label-mono">PROOF</div><div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:17 }}>GPS + HR</div></div>
            </div>
          </div>
          <div className="label-mono" style={{ margin:'18px 2px 9px' }}>YOUR 30-DAY ARC</div>
          <div className="panel" style={{ padding:0 }}>
            {F.arc.weeks.map(([w, name, desc], i)=>(
              <div key={w} className="row" style={{ gap:12, padding:'12px 14px', alignItems:'flex-start',
                borderBottom: i<F.arc.weeks.length-1?'1px solid var(--hairline)':'none' }}>
                <span className="num-mono" style={{ fontFamily:'var(--display)', fontWeight:700, fontSize:14, width:28,
                  color: i===0?'var(--acid)':'var(--steel)' }}>{w}</span>
                <div style={{ flex:1 }}>
                  <div style={{ fontFamily:'var(--display)', fontWeight:600, fontSize:14, letterSpacing:.5, color: i===0?'var(--acid)':'var(--bone)' }}>{name}</div>
                  <div className="muted" style={{ fontSize:12, marginTop:2 }}>{desc}</div>
                </div>
                {i===0 && <span className="label-mono acid" style={{ marginTop:2 }}>STARTS NOW</span>}
              </div>))}
          </div>
          <div className="label-mono" style={{ margin:'8px 2px 0', color:'var(--steel)' }}>{F.arc.line.toUpperCase()}</div>
          <button className="btn-primary" style={{ marginTop:18, flex:'0 0 auto' }} onClick={()=>nav.setPhase('app')}>
            ENTER HTD<span className="sub">LOCK IN. NO EXCUSES.</span>
          </button>
        </div>
      </div>
    );
  }

  function Onboarding() {
    const nav = useNav();
    const [step, setStep] = useState(0);
    const [persona, setPersona] = useState('HYBRID ATHLETE');
    const [goals, setGoals] = useState(['DAILY CONSISTENCY','MENTAL TOUGHNESS']);
    const [age, setAge] = useState('INTERMEDIATE');
    const [diff, setDiff] = useState(7);
    const [equip, setEquip] = useState(['RUNNING','DUMBBELLS','GYM ACCESS']);
    const [constraints, setConstraints] = useState([]);
    const [proof, setProof] = useState(['GPS MAP','WEARABLE SNAPSHOT']);
    const [crewSel, setCrewSel] = useState('JOIN HTD 30');
    const [safetyAck, setSafetyAck] = useState(false);
    const [exposure, setExposure] = useState(true);
    const [done, setDone] = useState(false);

    const tog = (arr,set)=>(v)=> set(arr.includes(v)?arr.filter(x=>x!==v):[...arr,v]);

    if (done) return <FirstMission />;

    const STEPS = [
      { k:'OPERATING MODE · 01', t:'CHOOSE YOUR MODE', body:<PersonaStep sel={persona} set={setPersona} /> },
      { k:'STANDARDS · 02', t:'SET YOUR STANDARDS', body:(
        <div>
          <div className="label-mono" style={{ marginBottom:9 }}>PRIMARY GOALS</div>
          <MultiStep options={F.onboarding.goals} sel={goals} toggle={tog(goals,setGoals)} />
          <div className="label-mono" style={{ margin:'20px 0 9px' }}>TRAINING AGE</div>
          <div className="row" style={{ flexWrap:'wrap', gap:8 }}>{F.onboarding.trainingAge.map(a=><Chip key={a} label={a} on={age===a} onClick={()=>setAge(a)} />)}</div>
          <div className="label-mono" style={{ margin:'20px 0 9px' }}>WEEKLY DIFFICULTY TARGET · <span className="acid">{diff}/10</span></div>
          <input type="range" min="1" max="10" value={diff} onChange={e=>setDiff(+e.target.value)} className="htd-range" style={{ width:'100%' }} />
        </div>) },
      { k:'EQUIPMENT · 03', t:'EQUIPMENT & LIMITS', body:(
        <div>
          <div className="label-mono" style={{ marginBottom:9 }}>AVAILABLE EQUIPMENT</div>
          <MultiStep options={F.onboarding.equipment} sel={equip} toggle={tog(equip,setEquip)} />
          <div className="label-mono" style={{ margin:'20px 0 9px' }}>CONSTRAINTS · PREVENT BAD ASSIGNMENTS</div>
          <MultiStep options={F.onboarding.constraints} sel={constraints} toggle={tog(constraints,setConstraints)} />
        </div>) },
      { k:'SAFETY · 04', t:'SAFETY SCREENING', body:<SafetyStep ack={safetyAck} setAck={setSafetyAck} exposure={exposure} setExposure={setExposure} />, gate:!safetyAck },
      { k:'PROOF · 05', t:'PROOF PREFERENCES', body:<ProofStep sel={proof} toggle={tog(proof,setProof)} /> },
      { k:'READINESS · 06', t:'CONNECT WEARABLES', body:<WearableStep /> },
      { k:'NETWORK · 07', t:'SEED THE PRESSURE', body:<CrewStep sel={crewSel} set={setCrewSel} /> },
    ];
    const cur = STEPS[step];
    const last = step === STEPS.length-1;

    return (
      <div className="grid-bg" style={{ position:'absolute', inset:0, background:'var(--void)', display:'flex', flexDirection:'column' }}>
        <StatusBar />
        <div className="appbar">
          <button className="iconbtn" onClick={()=> step? setStep(step-1) : nav.setPhase('welcome')}><Icon name="back" size={22} /></button>
          <div className="appbar-title" style={{ fontSize:13, letterSpacing:2 }}>ONBOARDING</div>
          {!last && step>=4 && <button className="iconbtn label-mono" style={{ width:'auto', padding:'0 8px' }} onClick={()=>setStep(step+1)}>SKIP</button>}
        </div>
        <div style={{ padding:'0 20px' }}><Rail step={step} total={STEPS.length} /></div>
        <div className="screen-body screen-enter" key={step} style={{ paddingTop:4, paddingBottom:110 }}>
          <StepHead kicker={cur.k} title={cur.t} />
          {cur.body}
        </div>
        <div style={{ position:'absolute', left:0, right:0, bottom:0, padding:'14px 20px 30px', zIndex:10, pointerEvents:'none',
          background:'linear-gradient(180deg, transparent, var(--void) 30%)' }}>
          <div style={{ pointerEvents:'auto' }}>
          <button className="btn-primary" disabled={!!cur.gate} style={cur.gate?{ opacity:.35, cursor:'not-allowed' }:{}}
            onClick={()=>{ if(cur.gate) return; last ? setDone(true) : setStep(step+1); }}>
            {cur.gate ? 'ACKNOWLEDGE TO CONTINUE' : last ? 'GENERATE FIRST MISSION' : 'CONTINUE'}
          </button>
          </div>
        </div>
      </div>
    );
  }

  window.HTDOnboarding = { Onboarding };
})();
