/** * Supera Glia - Sistema de Autenticação * @module core/auth */ (function() { 'use strict'; const { API_BASE, SESSION_KEY } = SuperaGlia.config; // Context de autenticação let AuthContext = null; // Inicialização quando React estiver pronto SuperaGlia.initAuth = function() { const { createContext, useContext, useState, useEffect } = SuperaGlia.hooks; AuthContext = createContext(null); // Hook para usar autenticação SuperaGlia.useAuth = () => useContext(AuthContext); // Provider de autenticação SuperaGlia.AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const saved = localStorage.getItem(SESSION_KEY); if (saved) { try { setUser(JSON.parse(saved)); } catch (e) { console.error('Erro ao carregar sessão:', e); localStorage.removeItem(SESSION_KEY); } } setLoading(false); }, []); const login = async (email, password) => { try { const res = await fetch(`${API_BASE}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }) }); const data = await res.json(); if (data.success) { setUser(data.user); localStorage.setItem(SESSION_KEY, JSON.stringify(data.user)); return { success: true }; } return { success: false, error: data.error || 'Credenciais inválidas' }; } catch (e) { console.error('Erro no login:', e); return { success: false, error: 'Erro de conexão' }; } }; const logout = () => { setUser(null); localStorage.removeItem(SESSION_KEY); }; return React.createElement(AuthContext.Provider, { value: { user, login, logout, loading } }, children); }; }; })();