const {S,Head,I,P,PEOPLE,AV}=window.WFA;
const {UIButton,UIInput,UISelect,UICard,UIAvatar,UIAvatarGroup,UIPill,UITabs,UIModal,UITable,UIStat,UIBanner,UIToggle,UIDrawer,UIEmptyState,UICheckbox,UIDataTable}=window.XCOPEDesignSystem_bf80f1;

/* ============ ONBOARDING / OFFBOARDING ============ */
const OB_TASKS=t=>t==="entrada"?[
  {g:"Antes do primeiro dia",items:[["Contrato assinado","Pessoas",true],["Criar conta e email","TI",true],["Preparar equipamento","TI",false],["Definir buddy","Responsável",false]]},
  {g:"Primeiro dia",items:[["Sessão de boas-vindas","Pessoas",false],["Entrega de equipamento","TI",false],["Acessos aos sistemas","TI",false],["Visita e apresentações","Responsável",false]]},
  {g:"Primeira semana",items:[["Formação de segurança","Formação",false],["Plano dos 30 dias","Responsável",false],["Leitura das políticas","Colaborador",false]]},
  {g:"Primeiros 90 dias",items:[["Conversa de 30 dias","Responsável",false],["Conversa de 90 dias","Responsável",false]]},
]:[
  {g:"Antes da saída",items:[["Carta de rescisão recebida","Pessoas",true],["Plano de transferência de tarefas","Responsável",false],["Entrevista de saída","Pessoas",false]]},
  {g:"Último dia",items:[["Devolução de equipamento","TI",false],["Revogar acessos","TI",false],["Certificado de trabalho","Pessoas",false]]},
  {g:"Depois",items:[["Acerto final de contas","Pessoas",false],["Comunicação à equipa","Responsável",false]]},
];
const OB_PROC=[
  {id:1,who:"Tiago Ferraz",role:"Engenheiro de QA",dept:"Engenharia",tipo:"entrada",data:"01 set",mgr:"Rui Pinto",done:2},
  {id:2,who:"Rita Amorim",role:"Analista de dados",dept:"Dados",tipo:"entrada",data:"15 ago",mgr:"Sofia Melo",done:5},
  {id:3,who:"Bruno Vaz",role:"Designer de produto",dept:"Produto",tipo:"entrada",data:"08 set",mgr:"Zain Franci",done:1},
  {id:4,who:"Miguel Antunes",role:"Comercial",dept:"Comercial",tipo:"saida",data:"31 jul",mgr:"Tomás Jervell",done:1},
];

S.onboarding=()=>{
  const [tipo,setTipo]=React.useState("entrada");
  const [procs,setProcs]=React.useState(OB_PROC);
  const [sel,setSel]=React.useState(null);
  const [checks,setChecks]=React.useState({});
  const [novo,setNovo]=React.useState(false);
  const [avisou,setAvisou]=React.useState(null);
  const list=procs.filter(p=>p.tipo===tipo);
  const cur=sel?procs.find(p=>p.id===sel):null;
  const groups=cur?OB_TASKS(cur.tipo):[];
  const key=(pid,g,i)=>pid+"|"+g+"|"+i;
  // each process starts at its own point: OB_PROC.done says how many steps are already ticked
  const seeded=React.useMemo(()=>{const m={};procs.forEach(p=>{let left=p.done;OB_TASKS(p.tipo).forEach(g=>g.items.forEach((it,i)=>{m[key(p.id,g.g,i)]=left-- >0;}));});return m;},[procs]);
  const isOn=(pid,g,i,def)=>{const k=key(pid,g,i);return k in checks?checks[k]:(k in seeded?seeded[k]:def);};
  const toggle=(pid,g,i,def)=>setChecks(c=>({...c,[key(pid,g,i)]:!isOn(pid,g,i,def)}));
  const total=t=>OB_TASKS(t).reduce((n,g)=>n+g.items.length,0);
  const doneOf=p=>OB_TASKS(p.tipo).reduce((n,g)=>n+g.items.filter((it,i)=>isOn(p.id,g.g,i,it[2])).length,0);

  return <React.Fragment>
  <Head scoped title="Admissões e saídas" desc={procs.filter(p=>p.tipo==="entrada").length+" admissões em curso · "+procs.filter(p=>p.tipo==="saida").length+" saída"}
    actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovo(true)}>Novo processo</UIButton>}/>

  {avisou&&<UIBanner tone="success" title="Responsáveis notificados" style={{marginBottom:16}}>Pessoas, TI e o responsável direto receberam as tarefas pendentes de {avisou}.</UIBanner>}
  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
      <UITabs value={tipo} onChange={setTipo} items={[{value:"entrada",label:"Admissões"},{value:"saida",label:"Saídas"}]}/>
    </div>
    <div style={{flex:1,minHeight:0,overflow:"auto"}}>
      {list.map(p=>{const gs=OB_TASKS(p.tipo);const d=doneOf(p),t=total(p.tipo);
        return <div key={p.id} onClick={()=>setSel(p.id)} style={{padding:"20px 24px",borderBottom:"1px solid var(--ui-divider)",cursor:"pointer"}} className="tk-row">
          <div className="row" style={{gap:16,marginBottom:16}}>
            {AV(p.who,"md")}
            <div style={{flex:1,minWidth:0}}>
              <div style={{fontWeight:600,fontSize:"var(--ui-fs-h3)",letterSpacing:"-0.01em"}}>{p.who}</div>
              <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2}}>{p.role} · {p.dept} · responsável {p.mgr}</div>
            </div>
            <div style={{textAlign:"right"}}>
              <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)"}}>{p.tipo==="entrada"?"Entra "+p.data:"Sai "+p.data}</div>
              <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:2,fontVariantNumeric:"tabular-nums"}}>{d} de {t} tarefas</div>
            </div>
          </div>
          <div style={{display:"grid",gridTemplateColumns:"repeat("+gs.length+",minmax(0,1fr))",gap:12}}>
            {gs.map(g=>{const dn=g.items.filter((it,i)=>isOn(p.id,g.g,i,it[2])).length;const st=dn===g.items.length?"done":dn>0?"doing":"todo";
              return <div key={g.g}>
                <div style={{height:4,borderRadius:999,background:st==="done"?"var(--ui-success)":st==="doing"?"var(--ui-accent)":"var(--ui-surface-3)",marginBottom:8}}/>
                <div className="row" style={{gap:8}}>
                  <span style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,color:st==="todo"?"var(--ui-text-3)":"var(--ui-text)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{g.g}</span>
                  <span className="muted" style={{fontSize:"var(--ui-fs-xs)",fontVariantNumeric:"tabular-nums",flexShrink:0}}>{dn}/{g.items.length}</span>
                </div>
              </div>;})}
          </div>
        </div>;})}
      {!list.length&&<UIEmptyState title={tipo==="entrada"?"Sem admissões em curso":"Sem saídas em curso"} description="Quando uma proposta é aceite, o processo aparece aqui." action={<UIButton size="sm" variant="outline" onClick={()=>setNovo(true)}>Novo processo</UIButton>}/>}
    </div>
  </UICard>

  <UIDrawer open={!!cur} width={480} onClose={()=>setSel(null)}
    header={cur&&<span className="row" style={{gap:12}}><UIAvatar name={cur.who} size="sm"/><span><span style={{fontWeight:600,display:"block"}}>{cur.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{cur.role} · {cur.tipo==="entrada"?"entra "+cur.data:"sai "+cur.data}</span></span></span>}
    footer={cur&&<React.Fragment><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{doneOf(cur)} de {total(cur.tipo)} concluídas</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton><UIButton onClick={()=>{setAvisou(cur.who);setSel(null);setTimeout(()=>setAvisou(null),3000);}}>Notificar responsáveis</UIButton></React.Fragment>}>
    {cur&&<div style={{display:"flex",flexDirection:"column",gap:24}}>
      {groups.map(g=><div key={g.g}>
        <div className="row" style={{marginBottom:8}}><span style={{fontWeight:600,fontSize:"var(--ui-fs-sm)"}}>{g.g}</span><div className="spring"/>
          <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{g.items.filter((it,i)=>isOn(cur.id,g.g,i,it[2])).length}/{g.items.length}</span></div>
        {g.items.map(([label,owner,def],i)=>{const on=isOn(cur.id,g.g,i,def);
          return <div key={i} onClick={()=>toggle(cur.id,g.g,i,def)} className="row" style={{gap:12,padding:"8px 0",borderBottom:"1px solid var(--ui-divider)",cursor:"pointer"}}>
            <span style={{width:16,height:16,flexShrink:0,borderRadius:5,border:"1.5px solid "+(on?"var(--ui-success)":"var(--ui-border-2)"),background:on?"var(--ui-success)":"transparent",display:"flex",alignItems:"center",justifyContent:"center"}}>{on&&<I d={["m5 12 4.5 4.5L19 7"]} size={11} c="#fff"/>}</span>
            <span style={{flex:1,fontSize:"var(--ui-fs-sm)",textDecoration:on?"line-through":"none",opacity:on?0.6:1}}>{label}</span>
            <UIPill>{owner}</UIPill>
          </div>;})}
      </div>)}
    </div>}
  </UIDrawer>

  <UIModal open={novo} onClose={()=>setNovo(false)} title="Novo processo" width={520}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo(false)}>Cancelar</UIButton><UIButton onClick={()=>setNovo(false)}>Criar processo</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UISelect label="Tipo" options={["Admissão","Saída"]}/>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UIInput label="Pessoa" placeholder="Nome"/>
        <UIInput label="Data" placeholder="dd/mm"/>
        <UIInput label="Função" placeholder="Ex.: Engenheiro de QA"/>
        <UISelect label="Responsável" options={PEOPLE}/>
      </div>
      <UISelect label="Checklist a aplicar" options={["Padrão da empresa","Engenharia","Comercial","Sem checklist"]}/>
    </div>
  </UIModal>
  </React.Fragment>;
};

/* ============ AVALIAÇÕES DE DESEMPENHO ============ */
const AV_ROWS=[
  {who:"Rui Pinto",dept:"Engenharia",mgr:"Hugo Montenegro",auto:"Concluída",gestor:"Concluída",estado:"Fechada",nota:"4,2"},
  {who:"Zain Franci",dept:"Produto",mgr:"Hugo Montenegro",auto:"Concluída",gestor:"Em falta",estado:"A aguardar gestor",nota:"—"},
  {who:"Carla Dias",dept:"Pessoas",mgr:"Hugo Montenegro",auto:"Em falta",gestor:"Em falta",estado:"Não iniciada",nota:"—"},
  {who:"Sofia Melo",dept:"Dados",mgr:"Tomás Machado",auto:"Concluída",gestor:"Concluída",estado:"Fechada",nota:"4,6"},
  {who:"Tomás Jervell",dept:"Comercial",mgr:"Tomás Machado",auto:"Concluída",gestor:"Em curso",estado:"Em curso",nota:"—"},
];
const AV_OBJ=[
  ["Reduzir o tempo de resposta a incidentes","Concluído",100],
  ["Automatizar 80% dos testes de regressão","Em curso",65],
  ["Formar dois elementos em observabilidade","Em curso",50],
];

S.reviews=()=>{
  const [tab,setTab]=React.useState("ciclo");
  const [sel,setSel]=React.useState(null);
  const [novoCiclo,setNovoCiclo]=React.useState(false);
  const [form,setForm]=React.useState(null);
  const [scores,setScores]=React.useState({});
  const [objs,setObjs]=React.useState(AV_OBJ.map(([t,st,pct],i)=>({id:i,t,st,pct})));
  const [updObj,setUpdObj]=React.useState(null);
  const [updPct,setUpdPct]=React.useState(0);
  const [meets,setMeets]=React.useState([
    {id:1,d:"24 jul",who:"Rui Pinto",tema:"Feedback do trimestre",st:"Realizada",nota:"Rever plano de automação com a equipa de QA."},
    {id:2,d:"18 jul",who:"Zain Franci",tema:"Plano de desenvolvimento",st:"Realizada",nota:"Inscrever na formação de liderança de produto."},
    {id:3,d:"31 jul",who:"Carla Dias",tema:"Objetivos H2",st:"Agendada",nota:""},
  ]);
  const [sel11,setSel11]=React.useState(null);
  const [novo11,setNovo11]=React.useState(false);
  const [f11,setF11]=React.useState({who:"Rui Pinto",d:"",tema:""});
  const cur=sel?AV_ROWS.find(r=>r.who===sel):null;
  return <React.Fragment>
  <Head scoped title="Avaliações de desempenho" desc="Ciclo H1 2026 · fecha a 15 de agosto"
    actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNovoCiclo(true)}>Novo ciclo</UIButton>}/>

  <UICard style={{marginBottom:16,padding:"16px 24px"}}>
    <div className="row" style={{gap:24,flexWrap:"wrap"}}>
      <div style={{minWidth:150}}>
        <div className="muted" style={{fontSize:"var(--ui-fs-sm)",fontWeight:600}}>Ciclo H1 2026</div>
        <div style={{fontSize:"var(--ui-fs-h3)",fontWeight:600,marginTop:2}}>3 de 5 fechadas</div>
      </div>
      <div style={{flex:1,minWidth:220}}>
        <div style={{display:"flex",height:8,borderRadius:999,overflow:"hidden",background:"var(--ui-surface-3)"}}>
          <span style={{width:"60%",background:"var(--ui-success)"}}/><span style={{width:"20%",background:"var(--ui-data)"}}/>
        </div>
        <div className="row" style={{gap:16,marginTop:10,fontSize:"var(--ui-fs-sm)",color:"var(--ui-text-2)"}}>
          <span className="row" style={{gap:6}}><span style={{width:8,height:8,borderRadius:999,background:"var(--ui-success)"}}/>3 fechadas</span>
          <span className="row" style={{gap:6}}><span style={{width:8,height:8,borderRadius:999,background:"var(--ui-data)"}}/>1 em curso</span>
          <span className="row" style={{gap:6}}><span style={{width:8,height:8,borderRadius:999,background:"var(--ui-surface-3)"}}/>1 não iniciada</span>
        </div>
      </div>
      <div style={{textAlign:"right"}}>
        <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Nota média</div>
        <div className="row" style={{gap:8,justifyContent:"flex-end",marginTop:2}}>
          <span style={{fontSize:"var(--ui-fs-h3)",fontWeight:600}}>4,4</span><UIPill tone="success">+0,2</UIPill>
        </div>
      </div>
    </div>
  </UICard>

  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
      <UITabs value={tab} onChange={setTab} items={[{value:"ciclo",label:"Ciclo atual"},{value:"objetivos",label:"Objetivos"},{value:"reunioes",label:"Conversas 1:1"}]}/>
    </div>

    {tab==="ciclo"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable columns={[
        {key:"who",label:"Colaborador",render:v=><span className="row" style={{gap:12,fontWeight:600}}>{AV(v)} {v}</span>},
        {key:"dept",label:"Departamento"},
        {key:"mgr",label:"Avaliador"},
        {key:"auto",label:"Autoavaliação",render:v=><UIPill tone={v==="Concluída"?"success":"warning"} dot>{v}</UIPill>},
        {key:"gestor",label:"Gestor",render:v=><UIPill tone={v==="Concluída"?"success":v==="Em curso"?"info":"warning"} dot>{v}</UIPill>},
        {key:"nota",label:"Nota",align:"right",render:v=><span style={{fontWeight:600,fontVariantNumeric:"tabular-nums"}}>{v}</span>}]}
        rows={AV_ROWS} onRowClick={r=>setSel(r.who)}/>
    </div>}

    {tab==="objetivos"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:16,display:"flex",flexDirection:"column",gap:12}}>
      {objs.map(o=><UICard key={o.id} elevation={0}>
        <div className="row" style={{gap:16,flexWrap:"wrap"}}>
          <div style={{flex:1,minWidth:200}}><div style={{fontWeight:500}}>{o.t}</div>
            <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:4}}>Ciclo H1 2026 · Rui Pinto</div></div>
          <span style={{width:140,height:6,borderRadius:999,background:"var(--ui-surface-3)",overflow:"hidden",flexShrink:0,alignSelf:"center"}}><span style={{display:"block",width:o.pct+"%",height:"100%",background:o.st==="Concluído"?"var(--ui-success)":o.st==="Em curso"?"var(--ui-data)":"var(--ui-border-2)"}}/></span>
          <UIPill tone={o.st==="Concluído"?"success":o.st==="Em curso"?"info":"neutral"} dot>{o.st}</UIPill>
          <UIButton size="sm" variant="outline" onClick={()=>{setUpdPct(o.pct);setUpdObj(o);}}>Atualizar</UIButton>
        </div>
      </UICard>)}
    </div>}

    {tab==="reunioes"&&<div style={{flex:1,minHeight:0,overflow:"auto"}}>
      <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
        <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Conversas regulares com a tua equipa</span><div className="spring"/>
        <UIButton size="sm" icon={<I d={P.plus} size={14}/>} onClick={()=>setNovo11(true)}>Marcar 1:1</UIButton>
      </div>
      {meets.map(m=>
        <div key={m.id} className="tk-row" onClick={()=>setSel11(m)} style={{display:"grid",gridTemplateColumns:"92px minmax(180px,1fr) minmax(0,1.4fr) 120px",gap:16,alignItems:"center",padding:"16px",borderBottom:"1px solid var(--ui-divider)",cursor:"pointer"}}
          onMouseEnter={e=>e.currentTarget.style.background="var(--ui-hover)"} onMouseLeave={e=>e.currentTarget.style.background="transparent"}>
          <span className="muted" style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums"}}>{m.d}</span>
          <span className="row" style={{gap:12,minWidth:0}}>{AV(m.who,"xs")}<span style={{fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}>{m.who}</span></span>
          <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{m.tema}</span>
          <span style={{textAlign:"right"}}><UIPill tone={m.st==="Realizada"?"success":"info"} dot>{m.st}</UIPill></span>
        </div>)}
    </div>}
  </UICard>

  <UIDrawer open={!!cur} width={480} onClose={()=>setSel(null)}
    header={cur&&<span className="row" style={{gap:12}}><UIAvatar name={cur.who} size="sm"/><span><span style={{fontWeight:600,display:"block"}}>{cur.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{cur.dept} · avaliado por {cur.mgr}</span></span></span>}
    footer={cur&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton><UIButton onClick={()=>{setScores({});setForm(cur);}}>Preencher avaliação</UIButton></React.Fragment>}>
    {cur&&<div style={{display:"flex",flexDirection:"column",gap:24}}>
      <div className="row" style={{gap:8,flexWrap:"wrap"}}>
        <UIPill tone={cur.estado==="Fechada"?"success":"info"} dot>{cur.estado}</UIPill>
        {cur.nota!=="—"&&<UIPill tone="accent">Nota {cur.nota}</UIPill>}
      </div>
      <div style={{display:"grid",gridTemplateColumns:"140px minmax(0,1fr)",gap:"12px 16px",alignItems:"center",fontSize:"var(--ui-fs-sm)"}}>
        <span className="muted">Ciclo</span><span>H1 2026</span>
        <span className="muted">Autoavaliação</span><span><UIPill tone={cur.auto==="Concluída"?"success":"warning"} dot>{cur.auto}</UIPill></span>
        <span className="muted">Avaliação do gestor</span><span><UIPill tone={cur.gestor==="Concluída"?"success":"warning"} dot>{cur.gestor}</UIPill></span>
      </div>
      <div>
        <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)",marginBottom:8}}>Objetivos do ciclo</div>
        {objs.map(({t,st,pct})=><div key={t} style={{padding:"10px 0",borderBottom:"1px solid var(--ui-divider)"}}>
          <div className="row" style={{gap:12}}><span style={{flex:1,fontSize:"var(--ui-fs-sm)"}}>{t}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums"}}>{pct}%</span></div>
          <span style={{display:"block",marginTop:6,height:5,borderRadius:999,background:"var(--ui-surface-3)",overflow:"hidden"}}><span style={{display:"block",width:pct+"%",height:"100%",background:st==="Concluído"?"var(--ui-success)":st==="Em curso"?"var(--ui-data)":"var(--ui-border-2)"}}/></span>
        </div>)}
      </div>
      <div>
        <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)",marginBottom:8}}>Feedback</div>
        <UIInput placeholder="Escrever feedback para o ciclo…"/>
      </div>
    </div>}
  </UIDrawer>

  <UIModal open={novoCiclo} onClose={()=>setNovoCiclo(false)} title="Novo ciclo de avaliação" width={560}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Notifica avaliadores e avaliados</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovoCiclo(false)}>Cancelar</UIButton><UIButton onClick={()=>setNovoCiclo(false)}>Abrir ciclo</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Nome do ciclo" placeholder="Ex.: H2 2026"/>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UIInput label="Início" placeholder="01/09"/><UIInput label="Fecho" placeholder="15/10"/>
      </div>
      <UISelect label="Âmbito" options={["Toda a empresa","Por departamento","Só quem tem mais de 6 meses"]}/>
      <UISelect label="Escala" options={["1 a 5","1 a 10","Qualitativa"]}/>
      <div style={{display:"flex",flexDirection:"column",gap:12}}>
        <UIToggle label="Incluir autoavaliação" defaultChecked/>
        <UIToggle label="Incluir feedback de pares (360)"/>
        <UIToggle label="Exigir conversa 1:1 antes de fechar" defaultChecked/>
      </div>
    </div>
  </UIModal>

  <UIModal open={!!form} onClose={()=>setForm(null)} title={form?"Avaliação de "+form.who:""} width={560}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{Object.keys(scores).length} de 4 respondidas</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setForm(null)}>Guardar rascunho</UIButton><UIButton onClick={()=>setForm(null)}>Submeter avaliação</UIButton></div>}>
    {form&&<div style={{display:"flex",flexDirection:"column",gap:20}}>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Ciclo H1 2026 · escala de 1 a 5</div>
      {["Resultados face aos objetivos","Colaboração e trabalho em equipa","Autonomia e iniciativa","Comunicação"].map(q=>{const v=scores[q];
        return <div key={q}>
          <div className="row" style={{marginBottom:8}}><span style={{fontSize:"var(--ui-fs-sm)",fontWeight:500}}>{q}</span><div className="spring"/>
            <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{v?["Insuficiente","A desenvolver","Cumpre","Supera","Excecional"][v-1]:"Sem resposta"}</span></div>
          <div className="row" style={{gap:8}}>{[1,2,3,4,5].map(n=>{const on=v===n;
            return <span key={n} onClick={()=>setScores(sc=>({...sc,[q]:n}))} style={{cursor:"pointer",width:40,height:40,borderRadius:999,border:"1px solid "+(on?"var(--ui-accent)":"var(--ui-border)"),background:on?"var(--ui-accent)":"transparent",color:on?"var(--ui-on-accent)":"var(--ui-text-2)",display:"flex",alignItems:"center",justifyContent:"center",fontWeight:600,fontSize:"var(--ui-fs-sm)",transition:"background var(--ui-dur) var(--ui-ease)"}}>{n}</span>;})}</div>
        </div>;})}
      <UIInput label="Comentário final" placeholder="Pontos fortes e áreas a desenvolver"/>
    </div>}
  </UIModal>

  {updObj&&<UIModal open onClose={()=>setUpdObj(null)} title={"Atualizar objetivo"} width={480}
    footer={<div className="row" style={{gap:8}}><div className="spring"/><UIButton variant="ghost" onClick={()=>setUpdObj(null)}>Cancelar</UIButton>
      <UIButton onClick={()=>{const p=Math.max(0,Math.min(100,parseInt(updPct,10)||0));setObjs(os=>os.map(o=>o.id===updObj.id?{...o,pct:p,st:p>=100?"Concluído":p>0?"Em curso":"Por iniciar"}:o));setUpdObj(null);}}>Guardar progresso</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <div style={{fontWeight:500}}>{updObj.t}</div>
      <UIInput label="Progresso (%)" value={String(updPct)} onChange={e=>setUpdPct(e.target.value.replace(/[^0-9]/g,""))}/>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>O estado atualiza-se sozinho: 0% por iniciar, 1-99% em curso, 100% concluído.</div>
    </div>
  </UIModal>}

  {novo11&&<UIModal open onClose={()=>setNovo11(false)} title="Marcar 1:1" width={480}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Cria o convite no calendário de ambos</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNovo11(false)}>Cancelar</UIButton>
      <UIButton onClick={()=>{setMeets(ms=>[...ms,{id:Date.now(),d:f11.d||"07 ago",who:f11.who,tema:f11.tema||"Conversa 1:1",st:"Agendada",nota:""}]);setF11({who:"Rui Pinto",d:"",tema:""});setNovo11(false);}}>Marcar</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UISelect label="Pessoa" value={f11.who} onChange={e=>setF11({...f11,who:e.target.value})} options={PEOPLE.slice(0,6)}/>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UIInput label="Data" placeholder="dd mmm" value={f11.d} onChange={e=>setF11({...f11,d:e.target.value})}/>
        <UIInput label="Tema" placeholder="Ex.: Objetivos H2" value={f11.tema} onChange={e=>setF11({...f11,tema:e.target.value})}/>
      </div>
    </div>
  </UIModal>}

  <UIDrawer open={!!sel11} width={440} onClose={()=>setSel11(null)}
    header={sel11&&<span className="row" style={{gap:12}}>{AV(sel11.who,"sm")}<span><span style={{fontWeight:600,display:"block"}}>1:1 com {sel11.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{sel11.d} · {sel11.tema}</span></span></span>}
    footer={sel11&&<React.Fragment>
      {sel11.st==="Agendada"&&<UIButton variant="outline" onClick={()=>{setMeets(ms=>ms.map(m=>m.id===sel11.id?{...m,st:"Realizada"}:m));setSel11(null);}}>Marcar como realizada</UIButton>}
      <div className="spring"/><UIButton variant="ghost" onClick={()=>setSel11(null)}>Fechar</UIButton></React.Fragment>}>
    {sel11&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div className="row" style={{gap:8}}><UIPill tone={sel11.st==="Realizada"?"success":"info"} dot>{sel11.st}</UIPill><UIPill>{sel11.tema}</UIPill></div>
      <div>
        <div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:8}}>Agenda partilhada</div>
        {["Resultados e destaques do período","Bloqueios e apoios necessários","Desenvolvimento e próximos passos"].map(a=>
          <div key={a} className="row" style={{gap:10,padding:"8px 0",borderBottom:"1px solid var(--ui-divider)",fontSize:"var(--ui-fs-sm)"}}>
            <I d={["m5 12 4.5 4.5L19 7"]} size={14} c="var(--ui-text-3)"/><span>{a}</span></div>)}
      </div>
      <div>
        <div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:8}}>Notas</div>
        {sel11.nota
          ?<div style={{padding:"12px 14px",borderRadius:"var(--ui-r-md)",background:"var(--ui-surface-2)",fontSize:"var(--ui-fs-sm)",lineHeight:1.5}}>{sel11.nota}</div>
          :<UIInput placeholder="Escreve uma nota para esta conversa…" onKeyDown={e=>{if(e.key==="Enter"&&e.target.value.trim()){const v=e.target.value.trim();setMeets(ms=>ms.map(m=>m.id===sel11.id?{...m,nota:v}:m));setSel11(s=>({...s,nota:v}));}}}/>}
        {!sel11.nota&&<div className="muted" style={{fontSize:"var(--ui-fs-xs)",marginTop:6}}>Enter para guardar. As notas ficam visíveis para os dois.</div>}
      </div>
    </div>}
  </UIDrawer>
  </React.Fragment>;
};

/* ============ FORMAÇÃO E CERTIFICAÇÕES ============ */
const TR_COURSES=[
  {t:"Higiene e segurança no trabalho",cat:"Obrigatória",dur:"4 h",mod:"Presencial",insc:38,prazo:"30 jul",oblig:true},
  {t:"Proteção de dados (RGPD)",cat:"Obrigatória",dur:"2 h",mod:"Online",insc:52,prazo:"15 ago",oblig:true},
  {t:"Liderança de equipas",cat:"Desenvolvimento",dur:"12 h",mod:"Híbrida",insc:9,prazo:"Set",oblig:false},
  {t:"Excel avançado",cat:"Ferramentas",dur:"8 h",mod:"Online",insc:14,prazo:"Contínua",oblig:false},
  {t:"Comunicação com clientes",cat:"Desenvolvimento",dur:"6 h",mod:"Presencial",insc:11,prazo:"Out",oblig:false},
];
const TR_CERTS=[
  {who:"Sofia Melo",cert:"Higiene e segurança",val:"31 jul 2026",dias:6},
  {who:"Rui Pinto",cert:"Carta de condução",val:"12 ago 2026",dias:18},
  {who:"Carla Dias",cert:"Certificado ADR",val:"02 set 2026",dias:39},
  {who:"Zain Franci",cert:"Primeiros socorros",val:"20 set 2026",dias:57},
];

S.training=()=>{
  const [tab,setTab]=React.useState("catalogo");
  const [insc,setInsc]=React.useState([]);
  const [nova,setNova]=React.useState(false);
  return <React.Fragment>
  <Head scoped title="Formação" desc="Catálogo, inscrições e validade das certificações"
    actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setNova(true)}>Nova formação</UIButton>}/>


  <UICard style={{padding:0,overflow:"hidden",flex:1,minHeight:0,display:"flex",flexDirection:"column"}}>
    <div className="row" style={{padding:"12px 16px",borderBottom:"1px solid var(--ui-divider)"}}>
      <UITabs value={tab} onChange={setTab} items={[{value:"catalogo",label:"Catálogo"},{value:"certificacoes",label:"Certificações"}]}/>
      <div className="spring"/>
      <span className="row" style={{gap:16,fontSize:"var(--ui-fs-sm)",color:"var(--ui-text-2)"}}>
        <span>conclusão <strong style={{color:"var(--ui-text)"}}>78%</strong></span>
        <span style={{width:1,height:14,background:"var(--ui-border)"}}/>
        <span><strong style={{color:"var(--ui-warning)"}}>2</strong> a expirar</span>
      </span>
    </div>

    {tab==="catalogo"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:16}}>
      <div className="grid g2">
        {TR_COURSES.map(c=>{const on=insc.includes(c.t);
          return <UICard key={c.t} elevation={0}>
            <div className="row" style={{gap:8,marginBottom:8,flexWrap:"wrap"}}>
              <UIPill tone={c.oblig?"warning":"neutral"} dot={c.oblig}>{c.cat}</UIPill>
              <UIPill>{c.mod}</UIPill>
            </div>
            <div style={{fontWeight:600,fontSize:"var(--ui-fs-h3)",letterSpacing:"-0.01em"}}>{c.t}</div>
            <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:4}}>{c.dur} · {c.insc} inscritos · prazo {c.prazo}</div>
            <div className="row" style={{marginTop:16,gap:12}}>
              <UIAvatarGroup size="xs" max={4} avatars={PEOPLE.slice(0,5).map(name=>({name}))}/>
              <div className="spring"/>
              <UIButton size="sm" variant={on?"secondary":"primary"} onClick={()=>setInsc(s=>on?s.filter(x=>x!==c.t):[...s,c.t])}>{on?"Inscrito":"Inscrever-me"}</UIButton>
            </div>
          </UICard>;})}
      </div>
    </div>}

    {tab==="certificacoes"&&<div style={{flex:1,minHeight:0,overflow:"auto"}}>
      <div style={{padding:16,paddingBottom:0}}>
        <UIBanner tone="warning" title="2 certificações expiram nos próximos 30 dias">Sofia Melo (higiene e segurança) e Rui Pinto (carta de condução).</UIBanner>
      </div>
      <div style={{padding:"16px 8px 8px"}}>
        <UIDataTable columns={[
          {key:"who",label:"Colaborador",render:v=><span className="row" style={{gap:12,fontWeight:600}}>{AV(v)} {v}</span>},
          {key:"cert",label:"Certificação"},
          {key:"val",label:"Válida até"},
          {key:"dias",label:"Estado",align:"right",render:v=><UIPill tone={v<=14?"danger":v<=30?"warning":"success"} dot>{v<=30?"expira em "+v+" dias":"válida"}</UIPill>}]}
          rows={TR_CERTS}/>
      </div>
    </div>}
  </UICard>

  <UIModal open={nova} onClose={()=>setNova(false)} title="Nova formação" width={560}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Fica visível no catálogo</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setNova(false)}>Cancelar</UIButton><UIButton onClick={()=>setNova(false)}>Criar formação</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Título" placeholder="Ex.: Proteção de dados (RGPD)"/>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <UISelect label="Categoria" options={["Obrigatória","Desenvolvimento","Ferramentas","Onboarding"]}/>
        <UISelect label="Modalidade" options={["Online","Presencial","Híbrida"]}/>
        <UIInput label="Duração" placeholder="4 h"/>
        <UIInput label="Prazo de conclusão" placeholder="dd/mm"/>
      </div>
      <UISelect label="Quem tem de fazer" options={["Toda a empresa","Por departamento","Por função","Inscrição livre"]}/>
      <UIInput label="Descrição" placeholder="Objetivos e conteúdos"/>
      <div style={{display:"flex",flexDirection:"column",gap:12}}>
        <UIToggle label="Emite certificado com validade" defaultChecked/>
        <UIToggle label="Avisar 30 dias antes de expirar" defaultChecked/>
      </div>
    </div>
  </UIModal>
  </React.Fragment>;
};
