import { ref, computed } from 'vue'; export interface User { id: number; name: string; email: string; avatar?: string; role: string; } export interface LoginCredentials { email: string; password: string; } // Estado global de autenticación const user = ref(null); const token = ref(null); const isLoading = ref(false); // Inicializar desde localStorage const initAuth = () => { const storedToken = localStorage.getItem('auth_token'); const storedUser = localStorage.getItem('auth_user'); if (storedToken && storedUser) { token.value = storedToken; user.value = JSON.parse(storedUser); } }; // Computeds const isAuthenticated = computed(() => !!user.value && !!token.value); // Función de login (simulada) const login = async (credentials: LoginCredentials): Promise<{ success: boolean; error?: string }> => { isLoading.value = true; try { // Simular llamada a API await new Promise(resolve => setTimeout(resolve, 1000)); // Validación simple (en producción esto vendría del backend) if (credentials.email === 'admin@gols.com' && credentials.password === 'admin123') { const mockUser: User = { id: 1, name: 'John Doe', email: credentials.email, avatar: '', role: 'admin' }; const mockToken = 'mock-jwt-token-' + Date.now(); // Guardar en estado user.value = mockUser; token.value = mockToken; // Persistir en localStorage localStorage.setItem('auth_token', mockToken); localStorage.setItem('auth_user', JSON.stringify(mockUser)); return { success: true }; } else { return { success: false, error: 'Credenciales inválidas' }; } } catch (error) { return { success: false, error: 'Error al iniciar sesión' }; } finally { isLoading.value = false; } }; // Función de logout const logout = () => { user.value = null; token.value = null; localStorage.removeItem('auth_token'); localStorage.removeItem('auth_user'); }; // Composable para usar en componentes export const useAuth = () => { return { user, token, isLoading, isAuthenticated, login, logout, initAuth }; };