1import{c as k,b as F,r as x,g as v,s as C,j as e,S as z,w,x as S,y as A,z as D,h as g,i as T,k as I,l as L,m as R,n,I as K,D as M,E as V,F as u,G as i,H as J,J as l,K as P,B as Q}from"./index-26Acqbp3.js";import{B as E}from"./badge-CI4bhZeT.js";import{D as U,a as $,b as G,c as W}from"./dialog-CDAhsRK3.js";import{E as X}from"./eye-BTr2K-FX.js";import"./index-C7yQ2Noq.js";import"./x-B4mrpJvk.js";const Y=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],Z=k("shield",Y),f={user_profiles:"Perfis",user_roles:"Cargos",api_keys:"API Keys",webhooks:"Webhooks",ai_configs:"IA",support_contracts:"Contratos"},ee={create:"bg-green-500/10 text-green-700",update:"bg-amber-500/10 text-amber-700",delete:"bg-red-500/10 text-red-700"};function ie(){const{isAdmin:_,profile:q}=F(),m=q?.company_id,[c,B]=x.useState("all"),[d,H]=x.useState("all"),[h,O]=x.useState(""),[r,y]=x.useState(null),{data:N,isLoading:j}=v({queryKey:["audit-logs",m,c,d],enabled:!!m&&_,queryFn:async()=>{let s=C.from("audit_logs").select("id,user_id,resource_type,resource_id,action,before_data,after_data,created_at").eq("company_id",m).order("created_at",{ascending:!1}).limit(200);c!=="all"&&(s=s.eq("resource_type",c)),d!=="all"&&(s=s.eq("action",d));const{data:a,error:t}=await s;if(t)throw t;return a??[]}}),p=Array.from(new Set((N??[]).map(s=>s.user_id).filter(Boolean))),{data:b}=v({queryKey:["audit-users",p],enabled:p.length>0,queryFn:async()=>{const{data:s}=await C.from("user_profiles").select("id, full_name, email").in("id",p),a=new Map;return(s??[]).forEach(t=>a.set(t.id,{name:t.full_name??"",email:t.email??""})),a}});if(!_)return e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground p-6",children:[e.jsx(z,{className:"h-4 w-4"})," Apenas administradores podem acessar a auditoria."]});const o=(N??[]).filter(s=>{if(!h)return!0;const a=h.toLowerCase(),t=b?.get(s.user_id??"");return s.resource_type.toLowerCase().includes(a)||(s.resource_id??"").toLowerCase().includes(a)||(t?.name??"").toLowerCase().includes(a)||(t?.email??"").toLowerCase().includes(a)});return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-semibold flex items-center gap-2",children:[e.jsx(Z,{className:"h-6 w-6 text-primary"})," Auditoria"]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Histórico de mudanças em recursos crÃticos. Retenção: 90 dias."})]}),e.jsxs(w,{children:[e.jsx(S,{children:e.jsx(A,{className:"text-base",children:"Filtros"})}),e.jsxs(D,{className:"grid grid-cols-1 md:grid-cols-4 gap-3",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"Recurso"}),e.jsxs(T,{value:c,onValueChange:B,children:[e.jsx(I,{children:e.jsx(L,{})}),e.jsxs(R,{children:[e.jsx(n,{value:"all",children:"Todos"}),Object.entries(f).map(([s,a])=>e.jsx(n,{value:s,children:a},s))]})]})]}),e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"Ação"}),e.jsxs(T,{value:d,onValueChange:H,children:[e.jsx(I,{children:e.jsx(L,{})}),e.jsxs(R,{children:[e.jsx(n,{value:"all",children:"Todas"}),e.jsx(n,{value:"create",children:"Criar"}),e.jsx(n,{value:"update",children:"Atualizar"}),e.jsx(n,{value:"delete",children:"Deletar"})]})]})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx(g,{className:"text-xs",children:"Buscar"}),e.jsx(K,{placeholder:"Recurso, ID ou usuário...",value:h,onChange:s=>O(s.target.value)})]})]})]}),e.jsxs(w,{children:[e.jsx(S,{children:e.jsxs(A,{className:"text-base",children:["Eventos ",o.length>0&&e.jsxs("span",{className:"text-muted-foreground font-normal",children:["(",o.length,")"]})]})}),e.jsx(D,{children:e.jsxs(M,{children:[e.jsx(V,{children:e.jsxs(u,{children:[e.jsx(i,{children:"Quando"}),e.jsx(i,{children:"Usuário"}),e.jsx(i,{children:"Recurso"}),e.jsx(i,{children:"Ação"}),e.jsx(i,{children:"ID"}),e.jsx(i,{className:"text-right",children:"Detalhes"})]})}),e.jsxs(J,{children:[j&&e.jsx(u,{children:e.jsx(l,{colSpan:6,className:"text-center text-muted-foreground py-6",children:"Carregando..."})}),!j&&o.map(s=>{const a=b?.get(s.user_id??"");return e.jsxs(u,{children:[e.jsx(l,{className:"text-xs whitespace-nowrap",children:P(new Date(s.created_at),"dd/MM/yy HH:mm:ss")}),e.jsx(l,{className:"text-sm",children:a?e.jsx("span",{title:a.email,children:a.name||a.email}):e.jsx("span",{className:"text-muted-foreground",children:"Sistema"})}),e.jsx(l,{children:e.jsx(E,{variant:"outline",children:f[s.resource_type]??s.resource_type})}),e.jsx(l,{children:e.jsx(E,{className:ee[s.action]??"",children:s.action})}),e.jsx(l,{className:"font-mono text-xs text-muted-foreground",children:s.resource_id?.slice(0,8)??"â"}),e.jsx(l,{className:"text-right",children:e.jsx(Q,{variant:"ghost",size:"sm",onClick:()=>y(s),children:e.jsx(X,{className:"h-4 w-4"})})})]},s.id)}),!j&&o.length===0&&e.jsx(u,{children:e.jsx(l,{colSpan:6,className:"text-center text-muted-foreground py-8",children:"Nenhum evento encontrado."})})]})]})})]}),e.jsx(U,{open:!!r,onOpenChange:s=>!s&&y(null),children:e.jsxs($,{className:"max-w-3xl max-h-[80vh] overflow-auto",children:[e.jsx(G,{children:e.jsx(W,{children:r&&`${f[r.resource_type]??r.resource_type} ⢠${r.action}`})}),r&&e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-xs",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold mb-1 text-muted-foreground",children:"Antes"}),e.jsx("pre",{className:"bg-muted p-3 rounded overflow-auto max-h-96",children:JSON.stringify(r.before_data,null,2)||"â"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold mb-1 text-muted-foreground",children:"Depois"}),e.jsx("pre",{className:"bg-muted p-3 rounded overflow-auto max-h-96",children:JSON.stringify(r.after_data,null,2)||"â"})]})]})]})})]})}export{ie as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.