1import{u as T,a as M,b as O,c as W,r,j as e,N as B,L as D,W as U,I as h,E as V,B as $,o as H,s as c,t as o,d as n}from"./index-FWKSGZPO.js";import{L as x}from"./label--tnD4pjg.js";import{E as J}from"./eye-off-DNM8AM-E.js";const G=H({email:c().trim().email("E-mail inválido").max(255),password:c().min(8,"MÃnimo 8 caracteres").max(72),fullName:c().trim().min(2,"Informe seu nome").max(120).optional()});function Y(){T();const{user:y,loading:E}=M(),{hasAccess:S,loading:k}=O(),C=W(),[t,q]=r.useState("signin"),[m,P]=r.useState(""),[g,A]=r.useState(""),[f,_]=r.useState(""),[v,w]=r.useState(!1),[N,b]=r.useState(!1),[d,z]=r.useState(!1);if(!E&&y&&!k)return e.jsx(B,{to:S?"/admin":"/minhas-reservas",replace:!0});const F=async a=>{var l;a.preventDefault();const s=G.safeParse({email:m,password:g,fullName:t==="signup"?f:void 0});if(!s.success){o({title:"Verifique os dados",description:s.error.issues[0].message,variant:"destructive"});return}w(!0);try{if(t==="signup"){const{error:i}=await n.auth.signUp({email:s.data.email,password:s.data.password,options:{emailRedirectTo:`${window.location.origin}/minhas-reservas`,data:{full_name:s.data.fullName}}});if(i)throw i;o({title:"Conta criada",description:"Verifique seu e-mail para confirmar o cadastro."})}else{const{error:i}=await n.auth.signInWithPassword({email:s.data.email,password:s.data.password});if(i)throw i;const{data:u}=await n.auth.getUser(),p=(l=u.user)==null?void 0:l.id;let j="/minhas-reservas";if(p){const[{data:L},{data:R}]=await Promise.all([n.from("user_roles").select("role").eq("user_id",p).eq("role","xpark_admin").maybeSingle(),n.from("memberships").select("organization_id, organizations!inner(status)").eq("user_id",p).eq("organizations.status","active").limit(1).maybeSingle()]);(L||R)&&(j="/admin")}C(j,{replace:!0})}}catch(i){const u=i instanceof Error?i.message:"Erro inesperado";o({title:"Não foi possÃvel continuar",description:u,variant:"destructive"})}finally{w(!1)}},I=async()=>{const a=c().email().safeParse(m.trim());if(!a.success){o({title:"Informe seu e-mail",description:'Digite o e-mail e clique em "Esqueci minha senha".',variant:"destructive"});return}b(!0);try{const{error:s}=await n.functions.invoke("send-password-recovery",{body:{email:a.data,redirectTo:`${window.location.origin}/reset-password`}});if(s)throw s;o({title:"E-mail enviado",description:"Se houver uma conta com esse e-mail, você receberá o link."})}catch(s){const l=s instanceof Error?s.message:"Erro inesperado";o({title:"Não foi possÃvel enviar",description:l,variant:"destructive"})}finally{b(!1)}};return e.jsx("div",{className:"min-h-screen bg-paper px-4 py-12",children:e.jsxs("div",{className:"mx-auto flex max-w-md flex-col gap-8",children:[e.jsx(D,{to:"/",className:"self-start",children:e.jsx(U,{size:28})}),e.jsxs("div",{className:"rounded-2xl border border-ink/10 bg-white p-8 shadow-card",children:[e.jsx("h1",{className:"font-display text-2xl font-semibold text-ink",children:t==="signin"?"Entrar no painel":"Criar conta de operador"}),e.jsx("p",{className:"mt-2 text-sm text-mute",children:t==="signin"?"Acesso restrito a estacionamentos parceiros.":"O acesso à organização é liberado pelo time xpark após o cadastro."}),e.jsxs("form",{onSubmit:F,className:"mt-6 space-y-4",children:[t==="signup"&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"fullName",children:"Nome completo"}),e.jsx(h,{id:"fullName",value:f,onChange:a=>_(a.target.value),autoComplete:"name"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"email",children:"E-mail"}),e.jsx(h,{id:"email",type:"email",value:m,onChange:a=>P(a.target.value),autoComplete:"email"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"password",children:"Senha"}),e.jsxs("div",{className:"relative",children:[e.jsx(h,{id:"password",type:d?"text":"password",value:g,onChange:a=>A(a.target.value),autoComplete:t==="signin"?"current-password":"new-password",className:"pr-10"}),e.jsx("button",{type:"button",onClick:()=>z(a=>!a),"aria-label":d?"Ocultar senha":"Mostrar senha",className:"absolute right-2 top-1/2 -translate-y-1/2 roun
1ded p-1 text-mute hover:text-ink",children:d?e.jsx(J,{className:"h-4 w-4"}):e.jsx(V,{className:"h-4 w-4"})})]})]}),e.jsx($,{type:"submit",className:"w-full",disabled:v,children:v?"Aguarde...":t==="signin"?"Entrar":"Criar conta"})]}),e.jsx("button",{type:"button",onClick:()=>q(t==="signin"?"signup":"signin"),className:"mt-4 w-full text-center text-sm text-mute hover:text-ink",children:t==="signin"?"Não tem conta? Criar agora":"Já tenho conta"}),t==="signin"&&e.jsx("button",{type:"button",onClick:I,disabled:N,className:"mt-2 w-full text-center text-xs text-mute hover:text-ink disabled:opacity-50",children:N?"Enviando...":"Esqueci minha senha"})]})]})})}export{Y as default};
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.