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

/* ============ RELATÓRIOS DE TEMPO ============ */
const TR_ROWS=[
  {id:1,who:"Hugo Montenegro",dept:"Pessoas",normais:160,extra:4,banco:2,faltas:0,util:98},
  {id:2,who:"Rui Pinto",dept:"Engenharia",normais:168,extra:12,banco:-3,faltas:1,util:96},
  {id:3,who:"Ana Reis",dept:"Produto",normais:144,extra:0,banco:0,faltas:2,util:88},
  {id:4,who:"Carla Dias",dept:"Pessoas",normais:160,extra:2,banco:1,faltas:0,util:97},
  {id:5,who:"Sofia Melo",dept:"Dados",normais:152,extra:8,banco:-1,faltas:1,util:94},
  {id:6,who:"Zain Franci",dept:"Produto",normais:160,extra:0,banco:4,faltas:0,util:99},
  {id:7,who:"Tomás Jervell",dept:"Comercial",normais:168,extra:16,banco:-6,faltas:0,util:92},
  {id:8,who:"João Alves",dept:"Dados",normais:156,extra:6,banco:0,faltas:1,util:95},
];
const TR_MESES=[["Fev",9420],["Mar",9880],["Abr",9640],["Mai",10120],["Jun",9960],["Jul",9984]];

S["time-reports"]=()=>{
  const [tab,setTab]=React.useState("pessoas");
  const [per,setPer]=React.useState("julho");
  const [sel,setSel]=React.useState(null);
  const tot=TR_ROWS.reduce((n,r)=>n+r.normais,0);
  const extra=TR_ROWS.reduce((n,r)=>n+r.extra,0);
  const banco=TR_ROWS.reduce((n,r)=>n+r.banco,0);

  return <React.Fragment>
  <Head scoped title="Relatórios de tempo" desc="Horas trabalhadas, extras e banco de horas"
    actions={<UIButton variant="secondary" icon={<I d={P.doc} size={16}/>}>Exportar</UIButton>}/>

  <div className="grid g4" style={{marginBottom:16}}>
    <UICard><UIStat label="Horas registadas" value={tot.toLocaleString("pt-PT")+" h"} sublabel={TR_ROWS.length+" pessoas"}/></UICard>
    <UICard><UIStat label="Horas extra" value={extra+" h"} delta="+18 h" deltaTone="neutral" sublabel="vs. junho"/></UICard>
    <UICard><UIStat label="Banco de horas" value={(banco>0?"+":"")+banco+" h"} sublabel="saldo do período"/></UICard>
    <UICard><UIStat label="Taxa de utilização" value="95%" delta="+1 pp" deltaTone="success" sublabel="média da equipa"/></UICard>
  </div>

  <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)",gap:16,flexWrap:"wrap"}}>
      <UITabs value={tab} onChange={setTab} items={[{value:"pessoas",label:"Por pessoa"},{value:"evolucao",label:"Evolução"},{value:"extras",label:"Horas extra"}]}/>
      <div className="spring"/>
      <div style={{width:180}}><UISelect value={per} onChange={e=>setPer(e.target.value)} options={[{value:"julho",label:"Julho 2026"},{value:"junho",label:"Junho 2026"},{value:"tri",label:"Último trimestre"}]}/></div>
    </div>

    {tab==="pessoas"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable rows={TR_ROWS} rowKey="id" searchable pageSize={10} searchPlaceholder="Pesquisar pessoas…" onRowClick={r=>setSel(r)}
        columns={[
          {key:"who",label:"Pessoa",sortable:true,render:(v,r)=><span className="row" style={{gap:12,minWidth:0}}>{AV(v,"xs")}<span style={{minWidth:0}}>
            <span style={{fontWeight:600,display:"block"}}>{v}</span>
            <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{r.dept}</span></span></span>},
          {key:"normais",label:"Normais",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums"}}>{v} h</span>},
          {key:"extra",label:"Extra",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums",fontWeight:v?600:400,color:v>10?"var(--ui-warning)":"var(--ui-text)"}}>{v} h</span>},
          {key:"banco",label:"Banco",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums",color:v<0?"var(--ui-danger)":v>0?"var(--ui-success)":"var(--ui-text-3)"}}>{v>0?"+":""}{v} h</span>},
          {key:"faltas",label:"Faltas",sortable:true,align:"right",render:v=>v?<UIPill tone="warning">{v}</UIPill>:<span className="muted">—</span>},
          {key:"util",label:"Utilização",sortable:true,render:v=><span className="row" style={{gap:12}}><UIProgress value={v} size="sm" tone={v>95?"success":v>90?"accent":"warning"} style={{flex:1,minWidth:70}}/><span style={{fontVariantNumeric:"tabular-nums",width:38,textAlign:"right",fontSize:"var(--ui-fs-sm)"}}>{v}%</span></span>},
        ]}/>
    </div>}

    {tab==="evolucao"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:16,display:"flex",flexDirection:"column",gap:16}}>
      <UICard elevation={0}>
        <div style={{fontWeight:600,marginBottom:4}}>Horas registadas por mês</div>
        <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginBottom:16}}>Total da empresa, em horas</div>
        <UIChart type="bar" data={TR_MESES.map(([x,v])=>({x,v}))} xKey="x" series={[{key:"v",label:"Horas"}]} height={200}/>
      </UICard>
      <div className="grid g2">
        <UICard elevation={0}><div style={{fontWeight:600,marginBottom:12}}>Distribuição</div>
          {[["Trabalho normal","9 984 h","94%"],["Horas extra","212 h","2%"],["Ausências","384 h","4%"]].map(([l,v,p])=>
            <div key={l} className="row" style={{padding:"10px 0",borderBottom:"1px solid var(--ui-divider)",gap:12}}>
              <span style={{flex:1,fontSize:"var(--ui-fs-sm)"}}>{l}</span>
              <span style={{fontWeight:600,fontVariantNumeric:"tabular-nums"}}>{v}</span>
              <span className="muted" style={{fontSize:"var(--ui-fs-sm)",width:38,textAlign:"right"}}>{p}</span>
            </div>)}
        </UICard>
        <UICard elevation={0}><div style={{fontWeight:600,marginBottom:12}}>Por departamento</div>
          {[["Engenharia",1680],["Comercial",1344],["Produto",1216],["Dados",1088],["Pessoas",960]].map(([d,h])=>
            <div key={d} className="row" style={{padding:"10px 0",borderBottom:"1px solid var(--ui-divider)",gap:12}}>
              <span style={{width:100,fontSize:"var(--ui-fs-sm)"}}>{d}</span>
              <UIProgress value={h} max={1800} size="sm" style={{flex:1}}/>
              <span className="muted" style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums",width:56,textAlign:"right"}}>{h} h</span>
            </div>)}
        </UICard>
      </div>
    </div>}

    {tab==="extras"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIBanner tone="warning" title="2 pessoas acima do limite mensal" style={{marginBottom:16}}>O limite legal é de 150 horas extra por ano. Tomás Jervell e Rui Pinto estão em ritmo de o ultrapassar.</UIBanner>
      <UIDataTable rows={TR_ROWS.filter(r=>r.extra>0)} rowKey="id" pageSize={10} onRowClick={r=>setSel(r)}
        emptyState={<UIEmptyState title="Sem horas extra" description="Ninguém registou horas extra neste período."/>}
        columns={[
          {key:"who",label:"Pessoa",sortable:true,render:v=><span className="row" style={{gap:12}}>{AV(v,"xs")}<span style={{fontWeight:600}}>{v}</span></span>},
          {key:"dept",label:"Departamento",sortable:true},
          {key:"extra",label:"Este mês",sortable:true,align:"right",render:v=><span style={{fontVariantNumeric:"tabular-nums",fontWeight:600}}>{v} h</span>},
          {key:"acum",label:"Acumulado no ano",align:"right",render:(v,r)=><span style={{fontVariantNumeric:"tabular-nums"}}>{r.extra*7} h</span>},
          {key:"lim",label:"Do limite anual",render:(v,r)=><span className="row" style={{gap:12}}><UIProgress value={r.extra*7} max={150} size="sm" tone={r.extra*7>100?"warning":"accent"} style={{flex:1,minWidth:70}}/><span style={{fontSize:"var(--ui-fs-sm)",fontVariantNumeric:"tabular-nums",width:38,textAlign:"right"}}>{Math.round(r.extra*7/150*100)}%</span></span>},
        ]}/>
    </div>}
  </UICard>

  <UIDrawer open={!!sel} width={420} onClose={()=>setSel(null)}
    header={sel&&<span className="row" style={{gap:12}}>{AV(sel.who)}<span><span style={{fontWeight:600,display:"block"}}>{sel.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{sel.dept}</span></span></span>}
    footer={sel&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton></React.Fragment>}>
    {sel&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Julho 2026 · dados até 24 jul</div>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        {[["Horas normais",sel.normais+" h"],["Horas extra",sel.extra+" h"],["Banco de horas",(sel.banco>0?"+":"")+sel.banco+" h"],["Faltas",sel.faltas||"nenhuma"]].map(([l,v])=>
          <div key={l}><div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:4}}>{l}</div><div style={{fontWeight:500,fontVariantNumeric:"tabular-nums"}}>{v}</div></div>)}
      </div>
      <div>
        <div className="row" style={{marginBottom:6,fontSize:"var(--ui-fs-sm)"}}><span className="muted">Utilização</span><div className="spring"/><span style={{fontVariantNumeric:"tabular-nums",fontWeight:600}}>{sel.util}%</span></div>
        <UIProgress value={sel.util} size="sm" tone={sel.util>95?"success":sel.util>90?"accent":"warning"}/>
      </div>
      {sel.extra>0&&<div>
        <div className="row" style={{marginBottom:6,fontSize:"var(--ui-fs-sm)"}}><span className="muted">Extra acumulado no ano</span><div className="spring"/><span style={{fontVariantNumeric:"tabular-nums",fontWeight:600}}>{sel.extra*7} h de 150 h</span></div>
        <UIProgress value={sel.extra*7} max={150} size="sm" tone={sel.extra*7>100?"warning":"accent"}/>
      </div>}
      {sel.extra*7>100&&<UIBanner tone="warning" title="Perto do limite legal">Ao ritmo atual, ultrapassa as 150 horas extra anuais antes do fim do ano.</UIBanner>}
    </div>}
  </UIDrawer>
  </React.Fragment>;
};

/* ============ UTILIZADORES ============ */
const AUD_ROWS=[
  {id:1,who:"Hugo Montenegro",acao:"Aprovou pedido de férias",alvo:"Rui Pinto · 12-14 ago",quando:"hoje 11:42",ip:"188.83.4.21",antes:"Pendente",depois:"Aprovado"},
  {id:2,who:"Carla Dias",acao:"Editou ficha de colaborador",alvo:"Ana Reis · morada",quando:"hoje 10:18",ip:"188.83.4.21",antes:"Rua das Flores 12",depois:"Av. da Boavista 900"},
  {id:3,who:"Hugo Montenegro",acao:"Alterou função de acesso",alvo:"Tomás Machado",quando:"ontem 17:03",ip:"188.83.4.21",antes:"Diretor intermédio",depois:"Administrador"},
  {id:4,who:"Tomás Machado",acao:"Exportou relatório de tempo",alvo:"Julho 2026 · empresa",quando:"ontem 09:55",ip:"94.61.112.7",antes:"—",depois:"Exportação registada"},
  {id:5,who:"Carla Dias",acao:"Suspendeu utilizador",alvo:"Bruno Costa",quando:"há 3 dias",ip:"188.83.4.21",antes:"Ativo",depois:"Suspenso"},
  {id:6,who:"Hugo Montenegro",acao:"Publicou comunicado",alvo:"Nova política de teletrabalho",quando:"há 2 dias",ip:"188.83.4.21",antes:"Rascunho",depois:"Publicado"},
];
const AU_ROWS=[
  {id:1,who:"Hugo Montenegro",email:"hugo@xcope.ai",role:"CEO",state:"Ativo",mfa:true,last:"há 5 min"},
  {id:2,who:"Rui Pinto",email:"rui.pinto@xcope.ai",role:"Diretor intermédio",state:"Ativo",mfa:true,last:"há 2 h"},
  {id:3,who:"Ana Reis",email:"ana.reis@xcope.ai",role:"Trabalhador",state:"Ativo",mfa:false,last:"ontem"},
  {id:4,who:"Carla Dias",email:"carla.dias@xcope.ai",role:"Trabalhador",state:"Ativo",mfa:true,last:"há 3 h"},
  {id:5,who:"Sofia Melo",email:"sofia.melo@xcope.ai",role:"Trabalhador",state:"Convite pendente",mfa:false,last:"—"},
  {id:6,who:"Tomás Machado",email:"tomas.machado@xcope.ai",role:"Administrador",state:"Ativo",mfa:true,last:"há 1 h"},
  {id:7,who:"João Alves",email:"joao.alves@xcope.ai",role:"Trabalhador",state:"Suspenso",mfa:false,last:"há 2 meses"},
];
const AU_TONE={"Ativo":"success","Convite pendente":"warning","Suspenso":"danger"};

S["admin-users"]=()=>{
  const [rows,setRows]=React.useState(AU_ROWS);
  const [tab,setTab]=React.useState("todos");
  const [convidar,setConvidar]=React.useState(false);
  const [f,setF]=React.useState({email:"",role:"Trabalhador"});
  const [sel,setSel]=React.useState(null);
  const [selA,setSelA]=React.useState(null);
  const [avisoU,setAvisoU]=React.useState(null);
  React.useEffect(()=>{if(!avisoU)return;const t=setTimeout(()=>setAvisoU(null),3000);return ()=>clearTimeout(t);},[avisoU]);
  const cur=sel?rows.find(r=>r.id===sel):null;

  const list=rows.filter(r=>tab==="todos"?true:tab==="pendentes"?r.state==="Convite pendente":tab==="suspensos"?r.state==="Suspenso":r.mfa===false);
  const convida=()=>{if(!f.email.trim())return;setRows(rs=>[{id:Date.now(),who:f.email.split("@")[0].replace(/\./g," ").replace(/\b\w/g,c=>c.toUpperCase()),email:f.email.trim(),role:f.role,state:"Convite pendente",mfa:false,last:"—"},...rs]);setF({email:"",role:"Trabalhador"});setConvidar(false);};
  const setState=(r,state)=>setRows(rs=>rs.map(x=>x.id===r.id?{...x,state}:x));

  return <React.Fragment>
  <Head scoped title="Utilizadores" desc={rows.filter(r=>r.state==="Ativo").length+" ativos · "+rows.filter(r=>r.state==="Convite pendente").length+" convites por aceitar"}
    actions={<UIButton icon={<I d={P.plus} size={16}/>} onClick={()=>setConvidar(true)}>Convidar</UIButton>}/>

  {avisoU&&<UIBanner tone="success" title="Feito" style={{marginBottom:16}}>{avisoU}</UIBanner>}
  {rows.some(r=>!r.mfa&&r.state==="Ativo")&&<UIBanner tone="warning" title="Contas sem autenticação em dois passos" style={{marginBottom:16}}
    action={<UIButton size="sm" variant="outline" onClick={()=>setTab("mfa")}>Ver contas</UIButton>}>
    {rows.filter(r=>!r.mfa&&r.state==="Ativo").length} pessoas com acesso a dados de colaboradores ainda não ativaram o segundo fator.
  </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={tab} onChange={setTab} items={[
        {value:"todos",label:"Todos",count:rows.length},
        {value:"pendentes",label:"Convites",count:rows.filter(r=>r.state==="Convite pendente").length},
        {value:"suspensos",label:"Suspensos"},
        {value:"mfa",label:"Sem 2FA"},
        {value:"auditoria",label:"Auditoria"}]}/>
    </div>
    {tab==="auditoria"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable rows={AUD_ROWS} rowKey="id" searchable pageSize={10} onRowClick={r=>setSelA(r)}
        searchPlaceholder="Pesquisar por pessoa ou ação…"
        columns={[
          {key:"who",label:"Quem",sortable:true,render:v=><span className="row" style={{gap:10,fontWeight:600}}>{AV(v,"xs")} {v}</span>},
          {key:"acao",label:"Ação",render:v=><span style={{fontWeight:500}}>{v}</span>},
          {key:"alvo",label:"Alvo",render:v=><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{v}</span>},
          {key:"quando",label:"Quando",sortable:true,align:"right",render:v=><span className="muted" style={{fontSize:"var(--ui-fs-sm)",whiteSpace:"nowrap"}}>{v}</span>},
        ]}/>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)",marginTop:12}}>O registo de auditoria é imutável e conservado durante 2 anos. Todas as ações sobre dados pessoais ficam registadas.</div>
    </div>}
    {tab!=="auditoria"&&<div style={{flex:1,minHeight:0,overflow:"auto",padding:"12px 16px 16px"}}>
      <UIDataTable rows={list} rowKey="id" searchable selectable pageSize={10} onRowClick={r=>setSel(r.id)}
        searchPlaceholder="Pesquisar por nome ou email…"
        emptyState={<UIEmptyState title="Nenhum utilizador" description="Não há contas neste separador."/>}
        bulkActions={<React.Fragment><UIButton size="sm" variant="outline" onClick={()=>setAvisoU("Convites reenviados aos utilizadores selecionados.")}>Reenviar convite</UIButton><UIButton size="sm" variant="outline" onClick={()=>setAvisoU("Utilizadores selecionados suspensos.")}>Suspender</UIButton></React.Fragment>}
        columns={[
          {key:"who",label:"Utilizador",sortable:true,render:(v,r)=><span className="row" style={{gap:12,minWidth:0}}>{AV(v,"xs")}<span style={{minWidth:0}}>
            <span style={{fontWeight:600,display:"block"}}>{v}</span>
            <span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{r.email}</span></span></span>},
          {key:"role",label:"Função",sortable:true,render:v=><UIPill>{v}</UIPill>},
          {key:"state",label:"Estado",sortable:true,render:v=><UIPill tone={AU_TONE[v]} dot>{v}</UIPill>},
          {key:"mfa",label:"2fa",align:"center",render:v=>v?<I d={["m5 12 4.5 4.5L19 7"]} size={16} c="var(--ui-success)"/>:<span className="muted">—</span>},
          {key:"last",label:"Último acesso",align:"right",render:v=><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{v}</span>},
        ]}/>
    </div>}
  </UICard>

  <UIDrawer open={!!selA} width={440} onClose={()=>setSelA(null)}
    header={selA&&<span className="row" style={{gap:12}}>{AV(selA.who,"sm")}<span><span style={{fontWeight:600,display:"block"}}>{selA.acao}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{selA.who} · {selA.quando}</span></span></span>}
    footer={selA&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSelA(null)}>Fechar</UIButton></React.Fragment>}>
    {selA&&<div style={{display:"flex",flexDirection:"column",gap:22}}>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        {[["Alvo",selA.alvo],["Quando",selA.quando],["Endereço IP",selA.ip],["Origem","Aplicação web"]].map(([l,v])=>
          <div key={l}><div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:4}}>{l}</div><div style={{fontWeight:500}}>{v}</div></div>)}
      </div>
      <div>
        <div className="muted" style={{fontSize:"var(--ui-fs-xs)",fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",marginBottom:10}}>Alteração</div>
        <div className="row" style={{gap:10,flexWrap:"wrap",fontSize:"var(--ui-fs-sm)"}}>
          <span style={{padding:"6px 12px",borderRadius:"var(--ui-r-pill)",background:"var(--ui-surface-2)",textDecoration:selA.antes==="—"?"none":"line-through",color:"var(--ui-text-3)"}}>{selA.antes}</span>
          <I d={["M5 12h14","m13 6 6 6-6 6"]} size={15} c="var(--ui-text-3)"/>
          <span style={{padding:"6px 12px",borderRadius:"var(--ui-r-pill)",background:"var(--ui-success-bg)",fontWeight:600}}>{selA.depois}</span>
        </div>
      </div>
      <div className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Registo imutável. Para contestar uma entrada, contacta o administrador do grupo.</div>
    </div>}
  </UIDrawer>

  <UIDrawer open={!!cur} width={440} onClose={()=>setSel(null)}
    header={cur&&<span className="row" style={{gap:12}}>{AV(cur.who,"sm")}<span><span style={{fontWeight:600,display:"block"}}>{cur.who}</span><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>{cur.email}</span></span></span>}
    footer={cur&&<React.Fragment><div className="spring"/><UIButton variant="ghost" onClick={()=>setSel(null)}>Fechar</UIButton>
      {cur.state==="Suspenso"
        ? <UIButton onClick={()=>{setState(cur,"Ativo");setSel(null);}}>Reativar</UIButton>
        : <UIButton variant="destructive" onClick={()=>{setState(cur,"Suspenso");setSel(null);}}>Suspender</UIButton>}</React.Fragment>}>
    {cur&&<div style={{display:"flex",flexDirection:"column",gap:24}}>
      <div className="row" style={{gap:8,flexWrap:"wrap"}}>
        <UIPill tone={AU_TONE[cur.state]} dot>{cur.state}</UIPill>
        <UIPill>{cur.role}</UIPill>
        {!cur.mfa&&<UIPill tone="warning" dot>Sem 2FA</UIPill>}
      </div>
      <div style={{display:"grid",gridTemplateColumns:"120px minmax(0,1fr)",gap:"12px 16px",alignItems:"center",fontSize:"var(--ui-fs-sm)"}}>
        <span className="muted">Função</span><span>{cur.role}</span>
        <span className="muted">Último acesso</span><span>{cur.last}</span>
        <span className="muted">2FA</span><span>{cur.mfa?"Ativa":"Por ativar"}</span>
      </div>
      <div>
        <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)",marginBottom:8}}>Ações</div>
        <div className="row" style={{gap:8,flexWrap:"wrap"}}>
          <UIButton size="sm" variant="outline" onClick={()=>{setAvisoU("Email de reposição enviado a "+cur.who+".");setSel(null);}}>Repor palavra-passe</UIButton>
          <UIButton size="sm" variant="outline" onClick={()=>{setAvisoU("Sessões de "+cur.who+" terminadas em todos os dispositivos.");setSel(null);}}>Terminar sessões</UIButton>
          {cur.state==="Convite pendente"&&<UIButton size="sm" variant="outline" onClick={()=>{setAvisoU("Convite reenviado para "+cur.email+".");setSel(null);}}>Reenviar convite</UIButton>}
        </div>
      </div>
      <div>
        <div style={{fontWeight:600,fontSize:"var(--ui-fs-sm)",marginBottom:8}}>Atividade recente</div>
        {[["Iniciou sessão",cur.last],["Alterou a palavra-passe","há 3 meses"],["Conta criada","jan 2024"]].map(([w,t])=>
          <div key={w} className="row" style={{padding:"8px 0",borderBottom:"1px solid var(--ui-divider)",fontSize:"var(--ui-fs-sm)"}}>
            <span style={{flex:1}}>{w}</span><span className="muted">{t}</span></div>)}
      </div>
    </div>}
  </UIDrawer>

  <UIModal open={convidar} onClose={()=>setConvidar(false)} title="Convidar utilizador" width={480}
    footer={<div className="row" style={{gap:8}}><span className="muted" style={{fontSize:"var(--ui-fs-sm)"}}>Envia um email com o link de acesso</span><div className="spring"/><UIButton variant="ghost" onClick={()=>setConvidar(false)}>Cancelar</UIButton><UIButton onClick={convida}>Enviar convite</UIButton></div>}>
    <div style={{display:"flex",flexDirection:"column",gap:16}}>
      <UIInput label="Email de trabalho" placeholder="nome@xcope.ai" value={f.email} onChange={e=>setF({...f,email:e.target.value})}/>
      <UISelect label="Função de acesso" value={f.role} onChange={e=>setF({...f,role:e.target.value})} options={["Trabalhador","Diretor intermédio","CEO","Administrador"]}/>
      <UIToggle label="Exigir autenticação em dois passos" defaultChecked/>
    </div>
  </UIModal>
  </React.Fragment>;
};
