import 'package:flutter/material.dart'; import '../data/session/session_storage.dart'; // Asegúrate de importar SessionStorage import '../models/models.dart'; import '../services/login_service.dart'; import '../services/services.dart'; enum Status { uninitialized, authenticated, authenticating, unauthenticated } class LoginViewModel extends ChangeNotifier { Status _status = Status.uninitialized; Status get status => _status; bool hasErrors = false; Map? _errores = {}; bool _obscureText = true; Usuario? _usuario; int? _idUsuario; bool _isLoading = true; // Indica si está verificando la sesión bool get isLoading => _isLoading; // Getter para el estado de carga // Getters Usuario? get usuario => _usuario; Map? get errores => _errores; Future login(String correo) async { try { print("Iniciando proceso de login para: $correo"); List usuarios = await RepoService().obtenerTodos(); print("Usuarios obtenidos de la base de datos: ${usuarios.length}"); Usuario? usuario = usuarios.firstWhere( (usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(), orElse: () => Usuario(), ); // Si el correo es válido if (usuario.id != 0) { print("Usuario encontrado: ${usuario.correo}, ID: ${usuario.id}"); _status = Status.authenticated; _errores = null; _idUsuario = usuario.id; // Guardar el id del usuario en SessionStorage await SessionStorage().saveId(_idUsuario!); print("ID guardado en SharedPreferences: $_idUsuario"); notifyListeners(); } else { print("Correo no válido: $correo"); hasErrors = true; _errores = {'correo': 'El correo no existe en el sistema'}; _status = Status.unauthenticated; notifyListeners(); } } catch (e) { print("Error durante el proceso de login: $e"); _status = Status.unauthenticated; notifyListeners(); } } Future checkSession() async { _isLoading = true; // Inicia el estado de carga notifyListeners(); int? idUsuarioGuardado = await SessionStorage().getId(); if (idUsuarioGuardado != null) { print("Sesión encontrada para el ID de usuario: $idUsuarioGuardado"); _idUsuario = idUsuarioGuardado; _status = Status.authenticated; } else { print("No se encontró ninguna sesión activa."); _status = Status.unauthenticated; } _isLoading = false; // Termina el estado de carga notifyListeners(); } void logOut() async { print("Cerrando sesión..."); _usuario = null; _idUsuario = null; _status = Status.unauthenticated; _errores = {}; await SessionStorage().clearId(); print("ID de usuario eliminado de SharedPreferences."); notifyListeners(); } void showPassword() { _obscureText = !_obscureText; notifyListeners(); } }