import React, { useState } from "react"; import { Button } from "../components/Button"; import { Copy, Trash2, Plus, Calendar, Key, Check } from "lucide-react"; interface AccessCodeManagementProps { onNavigate: (page: string) => void; } interface AccessCode { id: string; code: string; expiresIn: number; // dias createdAt: Date; expiresAt: Date; isActive: boolean; } export const AccessCodeManagement: React.FC = ({ onNavigate, }) => { const [accessCodes, setAccessCodes] = useState([ { id: "1", code: "PHOTUM2025", expiresIn: 30, createdAt: new Date(), expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000), isActive: true, }, ]); const [showCreateModal, setShowCreateModal] = useState(false); const [newCodeDays, setNewCodeDays] = useState("7"); const [copiedCode, setCopiedCode] = useState(null); const generateCode = () => { const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; let code = ""; for (let i = 0; i < 10; i++) { code += chars.charAt(Math.floor(Math.random() * chars.length)); } return code; }; const handleCreateCode = () => { const days = parseInt(newCodeDays); if (isNaN(days) || days < 1 || days > 365) { alert("Por favor, insira um número válido de dias entre 1 e 365"); return; } const newCode: AccessCode = { id: Date.now().toString(), code: generateCode(), expiresIn: days, createdAt: new Date(), expiresAt: new Date(Date.now() + days * 24 * 60 * 60 * 1000), isActive: true, }; setAccessCodes([newCode, ...accessCodes]); setShowCreateModal(false); setNewCodeDays("7"); }; const handleDeleteCode = (id: string) => { if (confirm("Tem certeza que deseja excluir este código de acesso?")) { setAccessCodes(accessCodes.filter((code) => code.id !== id)); } }; const handleCopyCode = (code: string) => { navigator.clipboard.writeText(code); setCopiedCode(code); setTimeout(() => setCopiedCode(null), 2000); }; const formatDate = (date: Date) => { return new Intl.DateTimeFormat("pt-BR", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", }).format(date); }; const getDaysRemaining = (expiresAt: Date) => { const now = new Date(); const diffTime = expiresAt.getTime() - now.getTime(); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return diffDays; }; const isExpired = (expiresAt: Date) => { return new Date() > expiresAt; }; return (
{/* Header */}

Gerenciar Códigos de Acesso

Crie e gerencie códigos de acesso temporários para novos cadastros

{/* Botão Criar Código */}
{/* Tabela de Códigos */}
{accessCodes.length === 0 ? (

Nenhum código de acesso criado

Clique em "Gerar Novo Código" para criar um código de acesso

) : (
{accessCodes.map((code) => { const expired = isExpired(code.expiresAt); const daysRemaining = getDaysRemaining(code.expiresAt); return ( ); })}
Status Código Validade (dias) Data de Criação Data de Expiração Ações
{expired ? "Expirado" : daysRemaining === 1 ? "1 dia" : `${daysRemaining} dias`}
{code.code}
{code.expiresIn} {code.expiresIn === 1 ? "dia" : "dias"} {formatDate(code.createdAt)} {formatDate(code.expiresAt)}
)}
{/* Modal de Criar Código */} {showCreateModal && (
setShowCreateModal(false)} >
e.stopPropagation()} >

Gerar Novo Código de Acesso

setNewCodeDays(e.target.value)} className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#492E61] focus:border-transparent" placeholder="Ex: 7" />

O código será válido por {newCodeDays} dia(s) a partir da criação

Dica: O código será gerado automaticamente e poderá ser compartilhado com os usuários que desejam se cadastrar.

)}
); };