// HR screens — Context, Catalog, User Sessions drill-down

// ---------------- Company Context (US-17) ----------------
const HrContext = ({setRoute}) => {
  const init = {...HR_CONTEXT, industry: HR_CONTEXT.industry || "", size: HR_CONTEXT.size || "", culture: HR_CONTEXT.culture || "", situations: HR_CONTEXT.situations || "", glossary: HR_CONTEXT.glossary || ""};
  const [data, setData] = React.useState(init);
  const [toast, setToast] = React.useState(null);
  const [previewOpen, setPreviewOpen] = React.useState(false);

  React.useEffect(()=>{
    if(!toast) return;
    const t = setTimeout(()=>setToast(null), 2800);
    return ()=>clearTimeout(t);
  },[toast]);

  const fields = [
    { id:"industry",  label:"Branża",       placeholder:"np. usługi finansowe, e-commerce, SaaS B2B…", rows:2, max:200,
      hint:"Jedna linia — czym się zajmujecie. AI użyje tego do doboru przykładów."},
    { id:"size",      label:"Wielkość i struktura", placeholder:"np. 180 osób, 2 biura (Warszawa + Kraków), praca hybrydowa 2/3", rows:2, max:300,
      hint:"Ile osób, gdzie, jak rozproszona firma."},
    { id:"culture",   label:"Kultura pracy", placeholder:"Jak rozmawiacie o problemach? Jak dajecie feedback? Czy inicjatywa jest ceniona czy przytłumiona? Jakie są niepisane zasady?", rows:5, max:800,
      hint:"Najważniejsze pole. Im bardziej szczegółowo, tym lepiej AI zrozumie co jest „naturalne” w waszej rozmowie."},
    { id:"situations",label:"Typowe sytuacje", placeholder:"Co się u was dzieje na co dzień? Deadline'y, trudni klienci, zmiany w zespołach, presja…", rows:4, max:600,
      hint:"Pomaga AI generować realistyczne okoliczności w scenariuszach."},
    { id:"glossary",  label:"Glosariusz i język firmowy", placeholder:"Skróty, nazwy systemów, role, slang. Np. „PM = Product Manager (nie Projekt)”, „QBR = Quarterly Business Review”, „crew = zespół sprzedaży”", rows:4, max:500,
      hint:"AI użyje waszych pojęć zamiast generycznych."},
  ];

  const set = (k,v) => setData(d => ({...d, [k]:v}));

  const totalChars = fields.reduce((a,f)=>a + (data[f.id]||"").length, 0);
  const completedCount = fields.filter(f => (data[f.id]||"").trim().length > 20).length;

  // Simple injection pattern check
  const injectionPattern = /ignore (previous|prior)|you are now|system prompt|forget (everything|all)|disregard/i;
  const hasInjection = fields.some(f => injectionPattern.test(data[f.id]||""));

  const save = () => setToast({ok:true, msg:"Kontekst firmy zapisany. AI uwzględni go w następnych scenariuszach."});

  const seedExample = () => setData({
    industry: "SaaS B2B — narzędzia HR dla firm 200-2000 osób",
    size: "180 osób. Warszawa (HQ, 120 osób) + Kraków (60). Hybrid 3/2. Zespoły produktowe rozproszone.",
    culture: "Płaska struktura, dużo autonomii. Bezpośredni feedback jest ceniony — 1:1 co tydzień. Odpowiedzialność indywidualna wysoka, presja na wyniki kwartalne. Ludzie niechętnie mówią wprost o tym że się nie wyrabiają — wolą zaciskać zęby. Zmiany ogłaszane są z wyprzedzeniem, ale egzekwowane szybko.",
    situations: "Spory o priorytety między PM a Engineering. Nagłe zmiany scope'u przez klientów enterprise. Onboarding nowych PMów — często senior ludzie, którym trudno przyjmować feedback. Burnout pod koniec kwartału.",
    glossary: "QBR — Quarterly Business Review (cykl przeglądu). PM = Product Manager. Squad = cross-funkcjonalny zespół (PM + eng + design). EOW = End of Week. „Czerwony” = deadline zagrożony. „Zielony” = wszystko ok.",
  });

  return (
    <div className="screen narrow slide-up" style={{maxWidth:820,paddingBottom:120}}>
      <div className="breadcrumb">
        <a onClick={()=>setRoute("hr-programs")}>Programy</a>
        <span className="sep">/</span>
        <span className="cur">Kontekst firmy</span>
      </div>

      <h1 className="page-title" style={{marginBottom:12}}>Kontekst <em>firmy</em></h1>
      <div className="subtitle" style={{marginBottom:32,maxWidth:640}}>To co wpiszesz pomoże AI dostosować rozmowy do waszej rzeczywistości — branży, struktury, kultury. AI traktuje to jako sugestię, nie sztywną instrukcję.</div>

      {/* Empty state hint */}
      {completedCount === 0 && (
        <div style={{padding:"22px 24px",background:"var(--bg-2)",border:"1px dashed var(--line-2)",borderRadius:14,marginBottom:32}}>
          <div style={{display:"flex",gap:14,alignItems:"flex-start"}}>
            <div style={{width:32,height:32,borderRadius:8,background:"var(--accent-soft)",color:"var(--accent-3)",display:"grid",placeItems:"center",flexShrink:0}}>
              <Icon name="sparkle" size={16}/>
            </div>
            <div style={{flex:1}}>
              <div style={{fontSize:14,fontWeight:500,marginBottom:4}}>Nie wiesz od czego zacząć?</div>
              <div style={{fontSize:13,color:"var(--fg-3)",lineHeight:1.5,marginBottom:12}}>Załaduję przykładowy kontekst dla firmy SaaS 180 osób. Dostosujesz go do siebie.</div>
              <button className="btn ghost sm" onClick={seedExample}>Wczytaj przykład</button>
            </div>
          </div>
        </div>
      )}

      {/* Injection warning */}
      {hasInjection && (
        <div style={{padding:"14px 18px",background:"rgba(239,68,68,.08)",border:"1px solid rgba(239,68,68,.25)",borderLeft:"3px solid var(--bad)",borderRadius:10,marginBottom:24,fontSize:13,color:"var(--fg-2)"}}>
          <strong style={{color:"var(--bad)",fontWeight:500}}>Uwaga:</strong> wykryliśmy frazę przypominającą próbę przejęcia kontroli nad AI („ignore previous”, „you are now” itp.). AI będzie traktować to jako zwykły tekst, ale warto przeformułować.
        </div>
      )}

      {/* Form */}
      <div className="stack-24">
        {fields.map(f => {
          const val = data[f.id] || "";
          const over = val.length > f.max;
          return (
            <div key={f.id}>
              <div className="flex between" style={{alignItems:"flex-end",marginBottom:8}}>
                <div className="field-label" style={{marginBottom:0}}>{f.label}</div>
                <div style={{fontSize:11,fontFamily:"var(--mono)",color:over?"var(--bad)":"var(--fg-4)",letterSpacing:".04em"}}>{val.length}/{f.max}</div>
              </div>
              <textarea
                className="textarea"
                rows={f.rows}
                maxLength={f.max+50}
                placeholder={f.placeholder}
                value={val}
                onChange={e=>set(f.id, e.target.value)}
                style={over ? {borderColor:"var(--bad)"} : null}
              />
              <div className="field-help" style={{marginTop:6}}>{f.hint}</div>
            </div>
          );
        })}
      </div>

      {/* Actions */}
      <div className="flex between" style={{marginTop:40,paddingTop:24,borderTop:"1px solid var(--line)",alignItems:"center"}}>
        <div className="muted" style={{fontSize:12}}>
          {completedCount}/{fields.length} pól wypełnionych · {totalChars} znaków
        </div>
        <div className="flex gap-12">
          <button className="btn ghost" onClick={()=>setPreviewOpen(true)}><Icon name="sparkle" size={14}/> Podgląd — jak AI to zinterpretuje</button>
          <button className="btn primary" onClick={save}>Zapisz</button>
        </div>
      </div>

      {/* Version history */}
      <div style={{marginTop:48,paddingTop:24,borderTop:"1px solid var(--line)"}}>
        <div className="eyebrow" style={{marginBottom:16}}>Historia zmian</div>
        <div className="stack-8">
          {HR_CONTEXT.history.map(h => (
            <div key={h.version} style={{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"12px 14px",border:"1px solid var(--line)",borderRadius:10,fontSize:13}}>
              <div style={{display:"flex",gap:14,alignItems:"center"}}>
                <span style={{fontFamily:"var(--mono)",fontSize:11,color:"var(--fg-4)",letterSpacing:".04em"}}>v{h.version}</span>
                <div>
                  <div style={{fontWeight:500}}>{h.note}</div>
                  <div className="muted" style={{fontSize:11,marginTop:2}}>{h.date} · {h.author}</div>
                </div>
              </div>
              <button className="btn link sm">Przywróć</button>
            </div>
          ))}
        </div>
      </div>

      {/* Preview modal */}
      {previewOpen && (
        <div className="modal-backdrop" onClick={()=>setPreviewOpen(false)}>
          <div className="modal" onClick={e=>e.stopPropagation()} style={{maxWidth:640}}>
            <div className="modal-head">
              <div className="eyebrow">Podgląd — jak AI użyje kontekstu</div>
              <button className="icon-btn" onClick={()=>setPreviewOpen(false)}>×</button>
            </div>
            <div className="modal-body" style={{padding:"24px 28px"}}>
              <div style={{fontFamily:"var(--serif)",fontSize:22,lineHeight:1.25,marginBottom:16}}>Scenariusz wygenerowany z kontekstem</div>
              <div style={{padding:"16px 18px",background:"var(--bg-2)",border:"1px solid var(--line)",borderRadius:12,fontSize:14,lineHeight:1.6,color:"var(--fg-2)",fontFamily:"var(--serif)"}}>
                <p style={{margin:"0 0 12px"}}><strong style={{color:"var(--fg)",fontWeight:500}}>Marek, Senior PM:</strong> „Słuchaj, wiem że ostatni QBR wypadł słabo. Ale mieliśmy trzy zmiany scope'u w ciągu dwóch tygodni — squad się zatrzymał, a ja próbowałem ratować sytuację na własną rękę. Może i powinienem wcześniej zaeskalować, ale u nas się nie eskaluje — u nas się ogarnia.”</p>
                <p style={{margin:0,color:"var(--fg-3)",fontSize:12}}>AI użyło pojęć „QBR”, „scope”, „squad”, „eskalować” z Twojego glosariusza. Ton jest zgodny z opisem kultury („ludzie niechętnie mówią wprost że się nie wyrabiają”).</p>
              </div>
              <div style={{marginTop:16,fontSize:12,color:"var(--fg-4)",lineHeight:1.5}}>
                Bez kontekstu AI użyłoby generycznych nazw i neutralnego tonu korporacyjnego.
              </div>
            </div>
            <div className="modal-foot">
              <button className="btn primary" onClick={()=>setPreviewOpen(false)}>Zamknij</button>
            </div>
          </div>
        </div>
      )}

      {/* Toast */}
      {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, { HrContext });
