import 'package:flutter/material.dart'; import '../data/session/session_storage.dart'; import '../models/models.dart'; import '../services/login_service.dart'; import '../services/services.dart'; import 'package:bcrypt/bcrypt.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; bool get isLoading => _isLoading; bool get obscureText => _obscureText; // Getters Usuario? get usuario => _usuario; Map? get errores => _errores; Future login(String correo, String contrasena) async { try { print("Iniciando proceso de login para: $correo"); List usuarios = await RepoService().obtenerTodos(); Usuario? usuario = usuarios.firstWhere( (usuario) => usuario.correo?.toLowerCase() == correo.toLowerCase(), orElse: () => Usuario(), ); if (usuario.id != 0 && usuario.clave != null) { bool esContrasenaValida = BCrypt.checkpw(contrasena, usuario.clave!); if (esContrasenaValida) { _status = Status.authenticated; _errores = null; _idUsuario = usuario.id; await SessionStorage().saveId(_idUsuario!); notifyListeners(); } else { _errores = {'contrasena': 'Contraseña incorrecta'}; _status = Status.unauthenticated; notifyListeners(); } } else { _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; 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(); } }