import { useMemo, useState } from "react"; import { Loader2, ShieldX } from "lucide-react"; import { BorderBeam } from "@/components/ui/border-beam"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { InteractiveHoverButton } from "@/components/ui/interactive-hover-button"; import { Label } from "@/components/ui/label"; import type { AccessBlockReason } from "@/contexts/AuthAccessContext"; import { authMeService } from "@/services/fechamento/authMe"; import { GlobalFunctions, TransferAreaProperties } from "@/GlobalFunctions"; type NoAccessScreenProps = { reason: AccessBlockReason | null; errorMessage?: string | null; }; function getMessage(reason: AccessBlockReason | null): string { if (reason === "inativo") { return "Seu usuário está inativo neste módulo. Solicite a reativação ao administrador."; } if (reason === "erro") { return "Não foi possível validar seu acesso agora. Tente novamente em instantes."; } return "Você não tem acesso a este módulo no momento. Solicite acesso ao administrador."; } export function NoAccessScreen({ reason, errorMessage }: NoAccessScreenProps) { const [unidadeNome, setUnidadeNome] = useState(""); const [adminNome, setAdminNome] = useState(""); const [adminEmail, setAdminEmail] = useState(""); const [saving, setSaving] = useState(false); /** Código do estabelecimento: prioriza área de transferência (Codex), depois o valor repassado pelo AuthGate. */ const estabelecimentoId = useMemo(() => { const fromTransfer = String( GlobalFunctions.getTransferProperty(TransferAreaProperties.EstabelecimentoCodigo) ?? "", ).trim(); const fromGate = (errorMessage ?? "").trim(); return fromTransfer || fromGate; }, [errorMessage]); const handleBootstrap = async () => { if (!estabelecimentoId) { return; } if (!unidadeNome.trim() || !adminNome.trim() || !adminEmail.trim()) { alert("Preencha nome da unidade, nome do admin e e-mail."); return; } try { setSaving(true); await authMeService.bootstrapInitialize({ estabelecimentoId, unidadeNome: unidadeNome.trim(), adminNome: adminNome.trim(), adminEmail: adminEmail.trim(), }); window.location.reload(); } catch (error) { alert(error instanceof Error ? error.message : "Erro ao inicializar ambiente."); } finally { setSaving(false); } }; return (
{getMessage(reason)}
: null} {reason === "bootstrap" ? (Preenchimento automático.
{!estabelecimentoId ? (Não foi possível obter o código do estabelecimento. Abra o Intelligence Score a partir do Commander com o estabelecimento carregado no transfer.
) : null}{errorMessage}
) : null}