import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../models/models.dart'; import '../database/db_helper.dart'; class AuthService extends ChangeNotifier { UserModel? _user; DomicilioModel? _primaryDomicilio; List _allDomicilios = []; bool _loading = true; UserModel? get currentUser => _user; DomicilioModel? get primaryDomicilio => _primaryDomicilio; List get allDomicilios => _allDomicilios; bool get isLoggedIn => _user != null; bool get loading => _loading; String get rol => _user?.rol ?? ''; AuthService() { _checkSession(); } Future _checkSession() async { final p = await SharedPreferences.getInstance(); final id = p.getInt('user_id'); if (id != null) { _user = await DbHelper.getUserById(id); if (_user?.rol == 'CIUDADANO') await reloadDomicilios(); } _loading = false; notifyListeners(); } Future reloadDomicilios() async { if (_user == null) return; _allDomicilios = await DbHelper.getDomiciliosByUser(_user!.id!); _primaryDomicilio = _allDomicilios.isNotEmpty ? _allDomicilios.firstWhere((d) => d.isPrimary, orElse: () => _allDomicilios.first) : null; notifyListeners(); } Future login(String email, String password) async { final user = await DbHelper.getUserByEmail(email.trim().toLowerCase()); if (user == null) return 'Correo no registrado'; if (user.password != password) return 'ContraseƱa incorrecta'; _user = user; if (user.rol == 'CIUDADANO') await reloadDomicilios(); final p = await SharedPreferences.getInstance(); await p.setInt('user_id', user.id!); notifyListeners(); return null; } Future register({required String nombre, required String email, required String password, required String calle, required String colonia, required String routeId, required String horarioEstimado}) async { final ex = await DbHelper.getUserByEmail(email.trim().toLowerCase()); if (ex != null) return 'Correo ya registrado'; final user = UserModel(nombre:nombre.trim(), email:email.trim().toLowerCase(), password:password, rol:'CIUDADANO'); final uid = await DbHelper.insertUser(user); await DbHelper.insertDomicilio(DomicilioModel(userId:uid, alias:'Casa', calle:calle.trim(), colonia:colonia, routeId:routeId, horarioEstimado:horarioEstimado, isPrimary:true)); _user = await DbHelper.getUserById(uid); await reloadDomicilios(); final p = await SharedPreferences.getInstance(); await p.setInt('user_id', uid); notifyListeners(); return null; } Future logout() async { _user = null; _primaryDomicilio = null; _allDomicilios = []; final p = await SharedPreferences.getInstance(); await p.remove('user_id'); notifyListeners(); } }