import React, { useState, useEffect } from 'react'; import { Play, Shield, LogOut, ArrowRight, Lock, Mail, RefreshCw, Layers, ShieldAlert, Users, GraduationCap, DollarSign, Database } from 'lucide-react'; import AdminDashboard from './components/AdminDashboard'; import AdminContentManager from './components/AdminContentManager'; export default function AdminApp() { const [token, setToken] = useState(localStorage.getItem('devflix_admin_token')); const [adminUser, setAdminUser] = useState<{ name: string; email: string; role: 'admin'; } | null>(null); // App routing inside admin panel const [activeView, setView] = useState<'dashboard' | 'courses'>('dashboard'); // Authentication forms const [loginEmail, setLoginEmail] = useState(''); const [loginPassword, setLoginPassword] = useState(''); const [authError, setAuthError] = useState(null); const [authLoading, setAuthLoading] = useState(false); useEffect(() => { if (token) { fetchAdminProfile(); } }, [token]); const fetchAdminProfile = async () => { try { const res = await fetch('/api/auth/me', { headers: { 'Authorization': `Bearer ${token}` } }); if (res.ok) { const data = await res.json(); if (data.role === 'admin') { setAdminUser(data); } else { // If a student tries to use the admin token setAuthError('Token inválido para acesso administrativo.'); handleLogout(); } } else { handleLogout(); } } catch (err) { console.error('Failed to load profile:', err); handleLogout(); } }; const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setAuthError(null); setAuthLoading(true); try { const res = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: loginEmail, password: loginPassword }) }); const data = await res.json(); if (!res.ok) { throw new Error(data.error || 'Erro ao efetuar login'); } if (data.user.role !== 'admin') { throw new Error('Acesso recusado. Apenas administradores podem acessar esta área.'); } localStorage.setItem('devflix_admin_token', data.token); setToken(data.token); setAdminUser(data.user); setLoginEmail(''); setLoginPassword(''); } catch (err: any) { setAuthError(err.message); } finally { setAuthLoading(false); } }; const handleLogout = () => { localStorage.removeItem('devflix_admin_token'); setToken(null); setAdminUser(null); }; const quickFillAdmin = () => { setLoginEmail('sidney.gomes1989@gmail.com'); setLoginPassword('admin123'); setAuthError(null); }; return (
{token && adminUser ? ( ) : ( /* --- UNAUTHENTICATED ADMIN ACCESS SCREEN --- */
{/* Glass login panel */}
{/* Admin Header Accent */}

MICROTECFLIX ADMIN

Autenticação obrigatória para gestores, administradores e moderadores.

{/* Error notifications */} {authError && (
{authError}
)} {/* Form */}
setLoginEmail(e.target.value)} placeholder="email.admin@devflix.com" className="w-full glass-input rounded-xl p-3.5 pl-11 text-xs text-white focus:outline-none" />
setLoginPassword(e.target.value)} placeholder="Sua senha privada" className="w-full glass-input rounded-xl p-3.5 pl-11 text-xs text-white focus:outline-none" />
{/* SANDBOX ACCESS PRESET */}
)}
); }