// HR Admin screens: Dashboard + Programs + Program creator

const HrDashboard = ({setRoute, programId, setActiveSessionUser}) => {
  const p = HR_PROGRAMS.find(x=>x.id===programId) || HR_PROGRAMS[0];
  const [teamFilter, setTeamFilter] = React.useState("all");
  const [skillFilter, setSkillFilter] = React.useState("all");
  const [statusFilter, setStatusFilter] = React.useState("all");

  const openUser = (u) => {
    setActiveSessionUser(u);
    setRoute("hr-user-sessions");
  };

  const teamList = Array.from(new Set(HR_USERS.map(u=>u.team)));
  const filteredUsers = HR_USERS.filter(u => {
    if (statusFilter!=="all" && u.status!==statusFilter) return false;
    if (teamFilter!=="all" && u.team!==teamFilter) return false;
    return true;
  });

  return (
    <div className="screen wide slide-up">
      <div className="breadcrumb">
        <a onClick={()=>setRoute("hr-programs")}>Programy</a>
        <span className="sep">/</span>
        <span className="cur">{p.name}</span>
      </div>

      <div className="flex between" style={{marginBottom:28,alignItems:"flex-end"}}>
        <div>
          <div className="eyebrow" style={{marginBottom:10}}>Program · {p.status==="live"?"live":p.status==="draft"?"draft":"zakończony"}</div>
          <h1 className="page-title">{p.name}</h1>
          <div className="subtitle">{p.skills} umiejętności · {p.scenarios} scenariuszy · deadline {p.deadlineShort}</div>
        </div>
        <div className="flex gap-12">
          <button className="btn ghost" onClick={()=>setRoute("hr-programs")}><Icon name="arrow-left" size={14}/> Wszystkie programy</button>
          <button className="btn ghost"><Icon name="save" size={14}/> Eksport CSV</button>
        </div>
      </div>

      <div className="grid-4" style={{marginBottom:28}}>
        <div className="metric">
          <div className="label">Przypisani</div>
          <div className="num">{p.assigned}</div>
          <div className="delta">w 6 zespołach</div>
        </div>
        <div className="metric">
          <div className="label">Aktywni</div>
          <div className="num">{p.active}</div>
          <div className="delta up">+5 w tym tygodniu</div>
        </div>
        <div className="metric">
          <div className="label">Ukończyli</div>
          <div className="num">{p.completed}</div>
          <div className="delta">{Math.round(p.completed/p.assigned*100)}% zespołu</div>
        </div>
        <div className="metric">
          <div className="label">Przeterminowani</div>
          <div className="num" style={{color:"var(--bad)"}}>{p.overdue}</div>
          <div className="delta">wymagają nudge</div>
        </div>
      </div>

      <div className="grid-2" style={{gridTemplateColumns:"1fr 1fr",gap:20,marginBottom:28}}>
        <div className="card">
          <div className="card-body">
            <div className="flex between" style={{marginBottom:14}}>
              <div><div style={{fontWeight:600}}>Rozkład wyników</div><div className="muted" style={{fontSize:12,marginTop:2}}>Histogram % · wszystkie próby w programie · próg ukończenia 70%</div></div>
              <div style={{fontFamily:"var(--serif)",fontSize:32,letterSpacing:"-.02em"}}>{p.avgScore}%<span className="muted" style={{fontSize:12,fontFamily:"var(--mono)",marginLeft:8}}>średnia</span></div>
            </div>
            {(()=>{
              const total = HISTO.reduce((a,b)=>a+b,0);
              const above = HISTO.slice(7).reduce((a,b)=>a+b,0); // 70%+
              return (
                <>
                  <div className="histo-wrap">
                    <div className="histo">
                      {HISTO.map((v,i)=>{
                        const lo = i*10, hi = (i+1)*10;
                        const pct = total ? Math.round(v/total*100) : 0;
                        const belowThreshold = i < 7;
                        return (
                          <div key={i} className={`bar ${belowThreshold?"bar-below":"bar-above"}`} style={{height:`${v*7}%`}}
                            title={`${lo}–${hi}%: ${v} prób · ${pct}% wszystkich`}/>
                        );
                      })}
                      {/* threshold line at 70% (between bucket 6 and 7, so 70% of width) */}
                      <div className="histo-threshold" style={{left:"70%"}} title="Próg ukończenia 70%">
                        <span className="histo-threshold-label">70%</span>
                      </div>
                    </div>
                    <div className="flex between" style={{fontSize:11,fontFamily:"var(--mono)",color:"var(--fg-4)",marginTop:4,letterSpacing:".04em"}}>
                      <span>0%</span><span>20%</span><span>40%</span><span>60%</span><span>80%</span><span>100%</span>
                    </div>
                  </div>
                  <div className="muted" style={{fontSize:12,marginTop:10,paddingTop:10,borderTop:"1px solid var(--line)"}}>
                    <strong style={{color:"var(--fg-2)",fontWeight:500}}>{total} prób</strong> · <strong style={{color:"var(--ok)",fontWeight:500}}>{Math.round(above/total*100)}%</strong> powyżej progu
                  </div>
                </>
              );
            })()}
          </div>
        </div>
        <div className="card">
          <div className="card-body">
            <div style={{fontWeight:600,marginBottom:4}}>Średni wynik per umiejętność</div>
            <div className="muted" style={{fontSize:12,marginBottom:18}}>Sortowane od najsłabszych — tu warto wzmocnić team.</div>
            <div className="stack-12">
              {[
                {name:"Zamknięcie rozmowy wspierająco",v:54,n:18},
                {name:"Rozmowa z oporującym zespołem",v:61,n:24},
                {name:"Aktywne słuchanie",v:68,n:31},
                {name:"Trudny feedback korygujący",v:74,n:42},
                {name:"Delegowanie zadań AI-first",v:81,n:29},
              ].map((r,i)=>(
                <div key={i} title={`${r.name} · ${r.v}% średnia z ${r.n} prób`}>
                  <div className="flex between" style={{marginBottom:6,fontSize:13,alignItems:"baseline"}}>
                    <span>{r.name}</span>
                    <span className="muted" style={{fontFamily:"var(--mono)",fontSize:12}}>
                      <strong style={{color:r.v<60?"var(--bad)":r.v<70?"var(--warn)":"var(--ok)",fontWeight:500}}>{r.v}%</strong>
                      <span style={{marginLeft:8,color:"var(--fg-4)",fontSize:11}}>· {r.n} prób</span>
                    </span>
                  </div>
                  <div className="progress"><span style={{width:`${r.v}%`,background:r.v<60?"linear-gradient(90deg,oklch(0.6 0.18 25),oklch(0.72 0.18 25))":r.v<70?"linear-gradient(90deg,oklch(0.65 0.16 80),oklch(0.78 0.14 80))":"linear-gradient(90deg,var(--accent),var(--accent-3))"}}/></div>
                </div>
              ))}
            </div>
            <div className="muted" style={{fontSize:11,marginTop:14,paddingTop:12,borderTop:"1px solid var(--line)",display:"flex",gap:12,fontFamily:"var(--mono)",letterSpacing:".04em",textTransform:"uppercase"}}>
              <span style={{display:"flex",alignItems:"center",gap:6}}><span style={{width:8,height:8,borderRadius:2,background:"oklch(0.62 0.18 25)"}}/>&lt;60%</span>
              <span style={{display:"flex",alignItems:"center",gap:6}}><span style={{width:8,height:8,borderRadius:2,background:"oklch(0.7 0.16 80)"}}/>60–70%</span>
              <span style={{display:"flex",alignItems:"center",gap:6}}><span style={{width:8,height:8,borderRadius:2,background:"var(--accent)"}}/>≥70%</span>
            </div>
          </div>
        </div>
      </div>

      {/* Users table */}
      <div className="card">
        <div style={{padding:"18px 20px",borderBottom:"1px solid var(--line)"}}>
          <div className="flex between" style={{alignItems:"center",marginBottom:14}}>
            <div><div style={{fontWeight:600}}>Postępy uczestników</div><div className="muted" style={{fontSize:12,marginTop:2}}>Kliknij aby zobaczyć sesje (bez transkryptu — zgodnie z polityką MVP)</div></div>
          </div>
          <div className="flex gap-8" style={{flexWrap:"wrap"}}>
            <div className="filter-group">
              <span className="filter-label">Status</span>
              {[{id:"all",l:"Wszyscy"},{id:"active",l:"Aktywni"},{id:"done",l:"Ukończeni"},{id:"overdue",l:"Przeterminowani"}].map(o=>(
                <button key={o.id} className={`pill ${statusFilter===o.id?"on":""}`} onClick={()=>setStatusFilter(o.id)}>{o.l}</button>
              ))}
            </div>
            <div style={{width:1,background:"var(--line)",margin:"4px 8px"}}/>
            <div className="filter-group">
              <span className="filter-label">Zespół</span>
              <select className="select-pill" value={teamFilter} onChange={e=>setTeamFilter(e.target.value)}>
                <option value="all">Wszystkie</option>
                {teamList.map(t=> <option key={t} value={t}>{t}</option>)}
              </select>
            </div>
            <div className="filter-group">
              <span className="filter-label">Umiejętność</span>
              <select className="select-pill" value={skillFilter} onChange={e=>setSkillFilter(e.target.value)}>
                <option value="all">Wszystkie</option>
                {SKILLS.slice(0,6).map(s=> <option key={s.id} value={s.id}>{s.name}</option>)}
              </select>
            </div>
          </div>
        </div>
        <table className="t">
          <thead><tr>
            <th>Osoba</th><th>Zespół</th><th>Status</th><th>Próby</th><th>Ostatni wynik</th><th>Trend</th><th></th>
          </tr></thead>
          <tbody>
            {filteredUsers.map((u,i)=>(
              <tr key={u.id} onClick={()=>openUser(u)} style={{cursor:"pointer"}}>
                <td>
                  <div className="flex center gap-12">
                    <div className="avatar" style={{width:32,height:32,fontSize:12}}>{u.name.split(" ").map(s=>s[0]).slice(0,2).join("")}</div>
                    <div>
                      <div style={{fontWeight:500}}>{u.name}</div>
                      <div className="muted" style={{fontSize:11,fontFamily:"var(--mono)"}}>id:{(1000+i)}</div>
                    </div>
                  </div>
                </td>
                <td className="muted">{u.team}</td>
                <td>
                  {u.status==="done"?<span className="chip ok" style={{fontSize:11}}><Icon name="check" size={10}/> Ukończone</span>:
                   u.status==="overdue"?<span className="chip bad" style={{fontSize:11}}>Przeterminowane</span>:
                   <span className="chip" style={{fontSize:11}}>Aktywne</span>}
                </td>
                <td className="num">{u.attempts}</td>
                <td className="num">{u.lastScore ? `${u.lastScore}%` : "—"}</td>
                <td>
                  {u.trend==="up" && <span style={{color:"var(--ok)"}}><Icon name="trend-up" size={16}/></span>}
                  {u.trend==="down" && <span style={{color:"var(--bad)"}}><Icon name="trend-down" size={16}/></span>}
                  {u.trend==="flat" && <span className="muted" style={{fontFamily:"var(--mono)",fontSize:11}}>— flat</span>}
                  {!u.trend && <span className="muted">—</span>}
                </td>
                <td><button className="btn link sm" onClick={(e)=>{e.stopPropagation(); openUser(u);}}>Zobacz sesje →</button></td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
    </div>
  );
};

// Program creator wizard
const HrProgramNew = ({setRoute}) => {
  const [step, setStep] = React.useState(0);
  const [data, setData] = React.useState({
    name:"",
    desc:"",
    months:1,
    contentType:"series",
    series:"hr-chaos",
    seriesExpanded:false,
    audience:"team",
    teamName:"HR & People Ops (12 osób)",
    mode:"required",
    deadlineMode:"date",
    deadline:"2026-05-31",
    escalation:"manager",
    nudge:["7d","1d"], // multi-select
    completion:"threshold-and-attempts",
    threshold:70,
    minAttempts:2,
  });
  const [publishOpen, setPublishOpen] = React.useState(false);
  const [csvOpen, setCsvOpen] = React.useState(false);
  const [toast, setToast] = React.useState(null);
  React.useEffect(()=>{
    if (!toast) return;
    const t = setTimeout(()=>setToast(null), 4000);
    return ()=>clearTimeout(t);
  },[toast]);

  const set = (k,v)=>setData(d=>({...d,[k]:v}));
  const toggleNudge = (id) => {
    setData(d => {
      const has = d.nudge.includes(id);
      return { ...d, nudge: has ? d.nudge.filter(n=>n!==id) : [...d.nudge, id] };
    });
  };

  const steps = [
    {label:"Krok 01", ttl:"Podstawy"},
    {label:"Krok 02", ttl:"Treść"},
    {label:"Krok 03", ttl:"Odbiorcy"},
    {label:"Krok 04", ttl:"Egzekwowanie"},
    {label:"Krok 05", ttl:"Ukończenie"},
    {label:"Krok 06", ttl:"Podsumowanie"},
  ];

  const nameValid = data.name.trim().length >= 3;
  const canAdvance = step !== 0 || nameValid;

  // Skills in selected series
  const seriesSkills = SKILLS.filter(k => EPISODES.find(e=>e.id===k.ep)?.series === data.series);

  // criteria copy for participant preview
  const criterionCopy =
    data.completion==="one-try"      ? "jedna próba" :
    data.completion==="threshold"    ? `próg ${data.threshold}%` :
    data.completion==="attempts"     ? `min. ${data.minAttempts} próby` :
    `próg ${data.threshold}% · min. ${data.minAttempts} próby`;

  const handlePublish = () => {
    if (data.mode === "required") {
      setPublishOpen(true);
    } else {
      setRoute("hr-dashboard");
      setTimeout(()=>setToast({ok:true, msg:"Program uruchomiony jako sugerowany. Widoczny na dashboardzie uczestników."}), 100);
    }
  };
  const confirmPublish = () => {
    setPublishOpen(false);
    setRoute("hr-dashboard");
    setTimeout(()=>setToast({ok:true, msg:"Program uruchomiony. 12 osób otrzymało powiadomienie (email + in-app)."}), 100);
  };

  return (
    <div className="screen slide-up">
      <div className="breadcrumb">
        <a onClick={()=>setRoute("hr-programs")}>Programy</a>
        <span className="sep">/</span>
        <span className="cur">Nowy program</span>
      </div>

      <h1 className="page-title">Nowy <em>program rozwojowy</em></h1>
      <div className="subtitle">Kreator w 6 krokach. Możesz wrócić do dowolnego kroku w dowolnym momencie.</div>

      <div className="stepper" style={{marginTop:28}}>
        {steps.map((s,i)=>(
          <button key={i} className={`step ${i===step?"on":i<step?"done":""}`} onClick={()=>setStep(i)}>
            <div className="n">{i<step ? "✓" : i+1}</div>
            <div><span className="label">{s.label}</span>{s.ttl}</div>
          </button>
        ))}
      </div>

      <div className="grid-2" style={{gridTemplateColumns:"1fr 380px",gap:32,alignItems:"start"}}>
        <div className="card"><div className="card-body" style={{padding:32}}>
          {step===0 && <div className="stack-24 fade-in">
            <div>
              <div className="field-label">Nazwa programu <span style={{color:"var(--bad)"}}>*</span></div>
              <input className="input" value={data.name} onChange={e=>set("name",e.target.value)} placeholder="np. Liderzy AI · Q3 2026" autoFocus/>
              {!nameValid && <div className="field-help" style={{color:"var(--fg-4)"}}>Minimum 3 znaki. Uczestnicy zobaczą tę nazwę na swoim dashboardzie.</div>}
            </div>
            <div>
              <div className="field-label">Opis <span className="muted" style={{fontWeight:400,fontSize:11}}>opcjonalnie</span></div>
              <textarea className="textarea" value={data.desc} onChange={e=>set("desc",e.target.value)} placeholder="Po co ten program? Co uczestnicy wyniosą?"/>
            </div>
            <div>
              <div className="field-label">Czas trwania</div>
              <div className="flex gap-8">
                {[1,2,3,6,12].map(m=> <button key={m} className={`pill ${data.months===m?"on":""}`} onClick={()=>set("months",m)}>{m} {m===1?"miesiąc":m<5?"miesiące":"miesięcy"}</button>)}
              </div>
            </div>
          </div>}

          {step===1 && <div className="stack-24 fade-in">
            <div>
              <div className="field-label">Co ma ćwiczyć uczestnik?</div>
              <div className="grid-3" style={{gap:12}}>
                {[
                  {id:"series",t:"Cała seria",d:"Wszystkie umiejętności z wybranej serii"},
                  {id:"episode",t:"Konkretny odcinek",d:"Tylko umiejętności z jednego odcinka"},
                  {id:"skills",t:"Wybrane umiejętności",d:"Cherry-pick z katalogu"},
                ].map(o=>(
                  <div key={o.id} className={`tile ${data.contentType===o.id?"on":""}`} onClick={()=>set("contentType",o.id)}>
                    <div className="tt">{o.t}<span className="ck"/></div>
                    <div className="dd">{o.d}</div>
                  </div>
                ))}
              </div>
            </div>
            <div>
              <div className="field-label">Źródło</div>
              <div className="stack-8">
                {SERIES.map(s=>{
                  const isSel = data.series===s.id;
                  const skillsInSeries = SKILLS.filter(k=>EPISODES.find(e=>e.id===k.ep)?.series===s.id);
                  return (
                    <div key={s.id} className={`tile ${isSel?"on":""}`} style={{padding:0,overflow:"hidden"}}>
                      <div onClick={()=>{set("series",s.id); set("seriesExpanded",true);}} style={{display:"flex",gap:16,alignItems:"center",padding:"14px 16px",cursor:"pointer"}}>
                        <div className={`mesh ${s.hue==="default"?"":s.hue}`} style={{width:56,height:56,borderRadius:10,flexShrink:0}}/>
                        <div style={{flex:1}}>
                          <div style={{fontWeight:600}}>{s.title}</div>
                          <div className="muted" style={{fontSize:12,marginTop:2}}>Host: {s.host} · {EPISODES.filter(e=>e.series===s.id).length} odcinków · {skillsInSeries.length} umiejętności</div>
                        </div>
                        <span className="ck" style={{width:20,height:20,borderRadius:"50%",border:"1.5px solid var(--line-2)",...(isSel?{background:"var(--accent-2)",borderColor:"var(--accent-2)"}:{}),display:"grid",placeItems:"center",flexShrink:0}}>{isSel && <span style={{width:7,height:7,borderRadius:"50%",background:"#fff"}}/>}</span>
                      </div>
                      {isSel && data.seriesExpanded && (
                        <div className="fade-in" style={{borderTop:"1px dashed var(--line)",padding:"14px 18px 18px 90px",background:"rgba(255,255,255,.015)"}}>
                          <div className="eyebrow" style={{marginBottom:10}}>Umiejętności w tej serii ({skillsInSeries.length})</div>
                          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px 16px"}}>
                            {skillsInSeries.map(k => (
                              <div key={k.id} style={{display:"flex",gap:8,fontSize:13,alignItems:"flex-start",lineHeight:1.4}}>
                                <span style={{color:"var(--accent-3)",fontFamily:"var(--mono)",fontSize:11,marginTop:2,flexShrink:0}}>{String(EPISODES.find(e=>e.id===k.ep)?.n || 0).padStart(2,"0")}</span>
                                <span>{k.name}</span>
                              </div>
                            ))}
                          </div>
                        </div>
                      )}
                    </div>
                  );
                })}
              </div>
            </div>
          </div>}

          {step===2 && <div className="stack-24 fade-in">
            <div>
              <div className="field-label">Komu przypisujesz?</div>
              <div className="grid-4" style={{gap:10}}>
                {[
                  {id:"individuals",t:"Osoby"},
                  {id:"team",t:"Zespół"},
                  {id:"dept",t:"Departament"},
                  {id:"tenant",t:"Cały tenant"},
                ].map(o=>(
                  <div key={o.id} className={`tile ${data.audience===o.id?"on":""}`} onClick={()=>set("audience",o.id)} style={{textAlign:"center",padding:"18px 12px"}}>
                    <Icon name={o.id==="individuals"?"user":o.id==="tenant"?"globe":"users"} size={22}/>
                    <div className="tt" style={{justifyContent:"center",marginTop:8}}>{o.t}</div>
                  </div>
                ))}
              </div>
            </div>
            <div>
              <div className="field-label">Wybrany zespół</div>
              <input className="input" value={data.teamName} onChange={e=>set("teamName",e.target.value)}/>
            </div>

            {/* Import/integrate as proper CTAs */}
            <div className="flex gap-8" style={{flexWrap:"wrap"}}>
              <button className="btn ghost sm" onClick={()=>setCsvOpen(true)}>
                <Icon name="upload" size={14}/> Importuj z CSV
              </button>
              <button className="btn ghost sm" title="Skontaktuj się z zespołem Youniversity żeby skonfigurować integrację" style={{position:"relative"}}>
                <Icon name="link" size={14}/> Połącz z SSO/HRIS
              </button>
            </div>

            <div style={{padding:"12px 14px",background:"var(--bg-2)",border:"1px solid var(--line)",borderRadius:10}}>
              <div className="eyebrow" style={{marginBottom:8}}>Podgląd odbiorców</div>
              <div className="flex gap-8" style={{flexWrap:"wrap"}}>
                {["Marta K.","Paweł N.","Julia W.","Tomek R.","Ola D.","Kuba M.","Anna S.","+ 5"].map((n,i)=>(
                  <span key={i} className="chip" style={{fontSize:11}}>{n}</span>
                ))}
              </div>
            </div>
          </div>}

          {step===3 && <div className="stack-24 fade-in">
            <div>
              <div className="field-label">Tryb</div>
              <div className="grid-2" style={{gap:10}}>
                <div className={`tile ${data.mode==="required"?"on":""}`} onClick={()=>set("mode","required")}>
                  <div className="tt">Obowiązkowy<span className="ck"/></div>
                  <div className="dd">Uczestnik dostaje powiadomienia i jest liczony do compliance.</div>
                </div>
                <div className={`tile ${data.mode==="suggested"?"on":""}`} onClick={()=>set("mode","suggested")}>
                  <div className="tt">Sugerowany<span className="ck"/></div>
                  <div className="dd">Widoczny na dashboardzie usera bez deadline'u.</div>
                </div>
              </div>
            </div>
            <div>
              <div className="field-label">Deadline</div>
              <div className="flex gap-8" style={{marginBottom:10}}>
                <button className={`pill ${data.deadlineMode==="date"?"on":""}`} onClick={()=>set("deadlineMode","date")}>Konkretna data</button>
                <button className={`pill ${data.deadlineMode==="none"?"on":""}`} onClick={()=>set("deadlineMode","none")}>Bez deadline</button>
              </div>
              {data.deadlineMode==="date" && <input className="input" type="date" value={data.deadline} onChange={e=>set("deadline",e.target.value)}/>}
            </div>
            <div>
              <div className="field-label">Eskalacja</div>
              <div className="flex gap-8">
                {[{id:"none",t:"Brak"},{id:"manager",t:"Do managera"},{id:"hr",t:"Do HR"}].map(o=>(
                  <button key={o.id} className={`pill ${data.escalation===o.id?"on":""}`} onClick={()=>set("escalation",o.id)}>{o.t}</button>
                ))}
              </div>
            </div>
            <div>
              <div className="flex between" style={{alignItems:"baseline",marginBottom:6}}>
                <div className="field-label" style={{marginBottom:0}}>Nudge przed deadline</div>
                <div className="muted" style={{fontSize:11}}>Wybierz jeden lub kilka</div>
              </div>
              <div className="flex gap-8" style={{flexWrap:"wrap"}}>
                <button
                  className={`pill ${data.nudge.length===0?"on":""}`}
                  onClick={()=>set("nudge",[])}
                  style={data.nudge.length===0?null:{borderStyle:"dashed"}}
                >Brak</button>
                <div style={{width:1,background:"var(--line)",margin:"4px 2px"}}/>
                {[{id:"14d",t:"14 dni"},{id:"7d",t:"7 dni"},{id:"3d",t:"3 dni"},{id:"1d",t:"1 dzień"}].map(o=>(
                  <button key={o.id} className={`pill ${data.nudge.includes(o.id)?"on":""}`} onClick={()=>toggleNudge(o.id)}>
                    {data.nudge.includes(o.id) && <Icon name="check" size={12} style={{marginRight:4}}/>}
                    {o.t}
                  </button>
                ))}
              </div>
            </div>
          </div>}

          {step===4 && <div className="stack-24 fade-in">
            <div>
              <div className="field-label">Kiedy umiejętność jest zaliczona?</div>
              <div className="stack-8">
                {[
                  {id:"one-try",t:"Jedna próba = zaliczone",d:"Najłagodniejsze. Dobre przy self-learning."},
                  {id:"threshold",t:`Próg wyniku ≥ ${data.threshold}%`,d:"Wymaga osiągnięcia wyniku. Bez limitu prób."},
                  {id:"attempts",t:`Minimum ${data.minAttempts} prób`,d:"Trening z liczby powtórzeń, niezależnie od wyniku."},
                  {id:"threshold-and-attempts",t:"Próg wyniku AND min. prób",d:"Najbardziej wymagające. Domyślne dla liderów."},
                ].map(o=>(
                  <div key={o.id} className={`tile ${data.completion===o.id?"on":""}`} onClick={()=>set("completion",o.id)}>
                    <div className="tt">{o.t}<span className="ck"/></div>
                    <div className="dd">{o.d}</div>
                  </div>
                ))}
              </div>
            </div>
            {(data.completion==="threshold"||data.completion==="threshold-and-attempts") && (
              <div>
                <div className="field-label">Próg wyniku</div>
                <div className="flex gap-8">
                  {[60,70,80,90].map(v=> <button key={v} className={`pill ${data.threshold===v?"on":""}`} onClick={()=>set("threshold",v)}>≥ {v}%</button>)}
                </div>
              </div>
            )}
            {(data.completion==="attempts"||data.completion==="threshold-and-attempts") && (
              <div>
                <div className="field-label">Minimum prób</div>
                <div className="flex gap-8">
                  {[2,3,5].map(v=> <button key={v} className={`pill ${data.minAttempts===v?"on":""}`} onClick={()=>set("minAttempts",v)}>{v} podejścia</button>)}
                </div>
              </div>
            )}
          </div>}

          {step===5 && <div className="stack-24 fade-in">
            <div className="eyebrow" style={{marginBottom:4}}>Podsumowanie</div>
            <div style={{fontFamily:"var(--serif)",fontSize:32,letterSpacing:"-.01em",lineHeight:1.15}}>{data.name || "Program bez nazwy"}</div>
            {data.desc && <div className="muted">{data.desc}</div>}

            <div style={{marginTop:8}}>
              {[
                ["Czas trwania", `${data.months} ${data.months===1?"miesiąc":data.months<5?"miesiące":"miesięcy"}`],
                ["Treść", data.contentType==="series"?"Cała seria":data.contentType==="episode"?"Konkretny odcinek":"Wybrane umiejętności"],
                ["Źródło", SERIES.find(s=>s.id===data.series)?.title],
                ["Liczba umiejętności", seriesSkills.length],
                ["Odbiorcy", data.teamName],
                ["Tryb", data.mode==="required"?"Obowiązkowy":"Sugerowany"],
                ["Deadline", data.deadlineMode==="none" ? "—" : data.deadline],
                ["Eskalacja", data.escalation==="none"?"Brak":data.escalation==="manager"?"Do managera":"Do HR"],
                ["Nudge", data.nudge.length===0 ? "Brak" : data.nudge.map(n=>({"14d":"14 dni","7d":"7 dni","3d":"3 dni","1d":"1 dzień"}[n])).join(" · ")],
                ["Kryterium ukończenia", data.completion==="one-try" ? "Jedna próba" :
                              data.completion==="threshold" ? `Próg ≥ ${data.threshold}%` :
                              data.completion==="attempts" ? `Min ${data.minAttempts} prób` :
                              `Próg ≥ ${data.threshold}% AND min ${data.minAttempts} prób`],
              ].map(([k,v],i)=>(
                <div key={i} className="summary-row">
                  <span className="eyebrow" style={{alignSelf:"center"}}>{k}</span>
                  <span style={{fontSize:14,textAlign:"right"}}>{v}</span>
                </div>
              ))}
            </div>
          </div>}

          <div className="flex between" style={{marginTop:36,paddingTop:24,borderTop:"1px solid var(--line)"}}>
            <button className="btn ghost" onClick={()=>setStep(s=>Math.max(0,s-1))} disabled={step===0}><Icon name="arrow-left" size={14}/> Wstecz</button>
            <div className="flex gap-8">
              <button className="btn link">Zapisz draft</button>
              {step<5 ? (
                <button className="btn primary" onClick={()=>setStep(s=>s+1)} disabled={!canAdvance}>Dalej <Icon name="arrow-right" size={14}/></button>
              ) : (
                <button className="btn primary" onClick={handlePublish}><Icon name="check" size={14}/> Opublikuj program</button>
              )}
            </div>
          </div>
        </div></div>

        <aside>
          <div style={{position:"sticky",top:120}} className="stack-16">
            <div className="card">
              <div className="card-body">
                <div className="eyebrow" style={{marginBottom:12}}>Podgląd na żywo <span className="muted" style={{fontSize:10,fontWeight:400,letterSpacing:".04em"}}>· widok HR</span></div>
                <div style={{fontFamily:"var(--serif)",fontSize:22,letterSpacing:"-.01em",lineHeight:1.15}}>{data.name || "—"}</div>
                <div className="muted" style={{fontSize:12,marginTop:6,marginBottom:18}}>{data.desc || "Opis pojawi się tutaj"}</div>
                <div style={{fontSize:13,display:"grid",gridTemplateColumns:"auto 1fr",gap:"8px 14px"}}>
                  <span className="muted">Tryb</span><span>{data.mode==="required"?"Obowiązkowy":"Sugerowany"}</span>
                  <span className="muted">Deadline</span><span>{data.deadlineMode==="none"?"—":data.deadline}</span>
                  <span className="muted">Odbiorców</span><span>~12</span>
                  <span className="muted">Umiejętności</span><span>{seriesSkills.length}</span>
                </div>
              </div>
            </div>

            {/* Participant-side preview on step 4 */}
            {step===4 && (
              <div className="card fade-in" style={{background:"linear-gradient(180deg, rgba(154,120,255,.08), transparent)"}}>
                <div className="card-body" style={{padding:"18px 20px"}}>
                  <div className="eyebrow" style={{marginBottom:12}}>Podgląd uczestnika <span className="muted" style={{fontSize:10,fontWeight:400,letterSpacing:".04em"}}>· widok w briefingu</span></div>
                  <div style={{padding:"14px 16px",background:"var(--bg-2)",border:"1px solid var(--line)",borderRadius:10,fontSize:13,lineHeight:1.5}}>
                    <div className="muted" style={{fontSize:11,marginBottom:6,fontFamily:"var(--mono)",letterSpacing:".06em"}}>Z PROGRAMU · {data.mode==="required"?"OBOWIĄZKOWE":"SUGEROWANE"}</div>
                    <div style={{fontFamily:"var(--serif)",fontSize:16,lineHeight:1.3,marginBottom:6,color:"var(--fg)"}}>{data.name || "Program bez nazwy"}</div>
                    <div className="muted" style={{fontSize:12}}>
                      Termin: <span style={{color:"var(--fg-2)"}}>{data.deadlineMode==="none"?"bez terminu":data.deadline}</span>
                      <br/>Zaliczenie: <span style={{color:"var(--accent-3)"}}>{criterionCopy}</span>
                    </div>
                  </div>
                  <div className="field-help" style={{marginTop:10}}>Dokładnie to uczestnik zobaczy w briefingu scenariusza.</div>
                </div>
              </div>
            )}

            <div style={{padding:"14px 16px",border:"1px dashed var(--line-2)",borderRadius:12,fontSize:12,color:"var(--fg-3)",lineHeight:1.55}}>
              <Icon name="info" size={14}/> Scenariusze pokazują się uczestnikom dopiero gdy mają status <span className="chip ok" style={{fontSize:10,padding:"1px 8px"}}>approved</span> od Content Admina.
            </div>
          </div>
        </aside>
      </div>

      {/* Publish confirmation modal */}
      {publishOpen && (
        <div className="modal-overlay" onClick={()=>setPublishOpen(false)}>
          <div className="modal-card" onClick={e=>e.stopPropagation()} style={{maxWidth:520}}>
            <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"20px 28px",borderBottom:"1px solid var(--line)"}}>
              <div className="eyebrow">Potwierdź publikację</div>
              <button className="icon-btn" onClick={()=>setPublishOpen(false)}><Icon name="x" size={14}/></button>
            </div>
            <div style={{padding:"20px 28px 8px"}}>
              <div style={{fontFamily:"var(--serif)",fontSize:24,lineHeight:1.25,marginBottom:6}}>Opublikować ten program?</div>
              <div className="muted" style={{fontSize:13,marginBottom:20}}>Po publikacji wykonają się następujące akcje:</div>
              <div className="stack-8">
                {[
                  "12 osób otrzyma powiadomienie (email + in-app)",
                  "Program będzie liczony do compliance uczestników",
                  `Deadline: ${data.deadlineMode==="none"?"bez terminu":data.deadline}`,
                  data.nudge.length>0 ? `Nudge przed deadline: ${data.nudge.map(n=>({"14d":"14 dni","7d":"7 dni","3d":"3 dni","1d":"1 dzień"}[n])).join(", ")}` : null,
                ].filter(Boolean).map((t,i)=>(
                  <div key={i} style={{display:"flex",gap:10,alignItems:"flex-start",fontSize:13,lineHeight:1.5}}>
                    <span style={{color:"var(--accent-3)",flexShrink:0,marginTop:2}}><Icon name="check" size={14}/></span>
                    <span>{t}</span>
                  </div>
                ))}
              </div>
              <div style={{marginTop:18,fontSize:12,color:"var(--fg-4)",lineHeight:1.5}}>Możesz wstrzymać lub edytować program w każdej chwili.</div>
            </div>
            <div style={{display:"flex",justifyContent:"flex-end",gap:10,padding:"16px 28px",borderTop:"1px solid var(--line)"}}>
              <button className="btn ghost" onClick={()=>setPublishOpen(false)}>Anuluj</button>
              <button className="btn primary" onClick={confirmPublish}><Icon name="check" size={14}/> Tak, opublikuj</button>
            </div>
          </div>
        </div>
      )}

      {/* CSV import modal */}
      {csvOpen && (
        <div className="modal-overlay" onClick={()=>setCsvOpen(false)}>
          <div className="modal-card" onClick={e=>e.stopPropagation()} style={{maxWidth:520}}>
            <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"20px 28px",borderBottom:"1px solid var(--line)"}}>
              <div className="eyebrow">Import z CSV</div>
              <button className="icon-btn" onClick={()=>setCsvOpen(false)}><Icon name="x" size={14}/></button>
            </div>
            <div style={{padding:"24px 28px"}}>
              <div style={{padding:"40px 20px",border:"1.5px dashed var(--line-2)",borderRadius:14,textAlign:"center",background:"var(--bg-2)"}}>
                <Icon name="upload" size={28}/>
                <div style={{fontFamily:"var(--serif)",fontSize:18,marginTop:10,marginBottom:4}}>Przeciągnij plik CSV lub kliknij</div>
                <div className="muted" style={{fontSize:12,lineHeight:1.5}}>Wymagane kolumny: email, imię, zespół<br/>Max 10 000 wierszy</div>
                <button className="btn ghost sm" style={{marginTop:16}}>Wybierz plik</button>
              </div>
              <div className="field-help" style={{marginTop:12}}>Po imporcie będziesz mógł zmapować kolumny i zweryfikować rekordy przed dodaniem.</div>
            </div>
            <div style={{display:"flex",justifyContent:"flex-end",padding:"16px 28px",borderTop:"1px solid var(--line)"}}>
              <button className="btn ghost" onClick={()=>setCsvOpen(false)}>Zamknij</button>
            </div>
          </div>
        </div>
      )}

      {toast && (
        <div className="toast">
          <div style={{display:"flex",gap:12,alignItems:"flex-start"}}>
            <div style={{width:24,height:24,borderRadius:"50%",background:"rgba(52,211,153,.18)",color:"var(--ok)",display:"grid",placeItems:"center",flexShrink:0,marginTop:2}}>
              <Icon name="check" size={13}/>
            </div>
            <div style={{flex:1,fontSize:13,lineHeight:1.5}}>{toast.msg}</div>
          </div>
        </div>
      )}
    </div>
  );
};

Object.assign(window, { HrDashboard, HrProgramNew });
