import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:geosector_app/core/repositories/user_repository.dart';
import 'package:geosector_app/presentation/widgets/loading_overlay.dart';

/// Service qui gère les opérations d'authentification avec affichage d'un overlay de chargement
class AuthService {
  final UserRepository _userRepository;

  AuthService(this._userRepository);

  /// Méthode de connexion avec affichage d'un overlay de chargement
  Future<bool> login(BuildContext context, String username, String password,
      {required String type}) async {
    return await LoadingOverlay.show(
      context: context,
      spinnerSize: 80.0, // Spinner plus grand
      strokeWidth: 6.0, // Trait plus épais
      future: _userRepository.login(username, password, type: type),
    );
  }

  /// Méthode de déconnexion avec affichage d'un overlay de chargement
  /// et redirection vers la page de démarrage
  Future<bool> logout(BuildContext context) async {
    final bool result = await LoadingOverlay.show(
      context: context,
      spinnerSize: 80.0, // Spinner plus grand
      strokeWidth: 6.0, // Trait plus épais
      future: _userRepository.logout(),
    );

    // Si la déconnexion a réussi, rediriger vers la page de démarrage
    if (result && context.mounted) {
      // Utiliser GoRouter pour naviguer vers la page de démarrage
      GoRouter.of(context).go('/');
    }

    return result;
  }

  /// Vérifie si un utilisateur est connecté
  bool isLoggedIn() {
    return _userRepository.isLoggedIn;
  }

  /// Récupère le rôle de l'utilisateur connecté
  int getUserRole() {
    return _userRepository.getUserRole();
  }
}
