import React, { useState, useEffect } from 'react'; import { Users, FileText, Wrench, LogOut, Plus, Trash2, Lock, Unlock, Shield, Eye, FileUp, Globe, Link as LinkIcon, AlertCircle } from 'lucide-react'; // --- INITIAL MOCK DATA --- const INITIAL_USERS = [ { id: 1, username: 'admin', password: 'admin', role: 'admin', active: true } ]; const App = () => { // --- STATE --- const [user, setUser] = useState(null); const [users, setUsers] = useState(INITIAL_USERS); const [notes, setNotes] = useState([]); const [tools, setTools] = useState([]); const [activeTab, setActiveTab] = useState('notes'); const [toast, setToast] = useState(null); // --- SESSION MANAGEMENT --- useEffect(() => { // Check session expiration (1 hour) const checkSession = setInterval(() => { if (user && user.loginTime) { const now = new Date().getTime(); const diff = now - user.loginTime; if (diff > 3600000) { // 1 hour in ms handleLogout(); showToast('Sessão expirada. Faça login novamente.'); } } }, 60000); // Check every minute return () => clearInterval(checkSession); }, [user]); const showToast = (message) => { setToast(message); setTimeout(() => setToast(null), 3000); }; const handleLogin = (username, password) => { const foundUser = users.find(u => u.username === username && u.password === password); if (foundUser) { if (!foundUser.active) { showToast('Sua conta está bloqueada.'); return; } setUser({ ...foundUser, loginTime: new Date().getTime() }); setActiveTab(foundUser.role === 'admin' ? 'users' : 'notes'); showToast(`Bem-vindo, ${username}!`); } else { showToast('Usuário ou senha inválidos.'); } }; const handleLogout = () => { setUser(null); setActiveTab('notes'); }; if (!user) { return ; } return (
{/* Toast Notification */} {toast && (
{toast}
)} {/* Page Content with simple fade transition */}
{activeTab === 'users' && user.role === 'admin' && ( )} {activeTab === 'notes' && ( )} {activeTab === 'tools' && ( )}