import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_kreta_api/models/student.dart';
import 'package:flutter/foundation.dart';

class UserProvider with ChangeNotifier {
  final Map<String, User> _users = {};
  String? _selectedUserId;
  User? get user => _users[_selectedUserId];

  // _user properties
  String? get instituteCode => user?.instituteCode;
  String? get id => user?.id;
  String? get name => user?.name;
  String? get username => user?.username;
  String? get password => user?.password;
  Role? get role => user?.role;
  Student? get student => user?.student;
  String? get nickname => user?.nickname;
  String? get displayName => user?.displayName;

  final SettingsProvider _settings;

  UserProvider({required SettingsProvider settings}) : _settings = settings;

  void setUser(String userId) {
    _selectedUserId = userId;
    _settings.update(lastAccountId: userId);
    notifyListeners();
  }

  void addUser(User user) {
    _users[user.id] = user;
    if (kDebugMode) {
      print("DEBUG: Added User: ${user.id}");
    }
  }

  void removeUser(String userId) {
    _users.removeWhere((key, value) => key == userId);
    if (_users.isNotEmpty) _selectedUserId = _users.keys.first;
    notifyListeners();
  }

  User getUser(String userId) {
    return _users[userId]!;
  }

  List<User> getUsers() {
    return _users.values.toList();
  }
}