import 'package:flutter_bcrypt/flutter_bcrypt.dart';
import 'package:http/http.dart' as http;
import '../../core/constants/urls.dart';
import '../../core/utils/app_logger.dart';

class HashPasswordService {
  /// Hache le mot de passe en utilisant Bcrypt.
  /// Renvoie une chaîne hachée sécurisée.
  Future<String> hashPassword(String email, String password) async {
    try {
      AppLogger.d("Tentative de récupération du sel depuis le serveur pour l'email : $email", tag: 'HashPasswordService');

      // Récupérer le sel depuis le serveur avec l'email
      final response = await http.get(Uri.parse('${Urls.baseUrl}/users/salt?email=$email'));

      String salt;
      if (response.statusCode == 200 && response.body.isNotEmpty) {
        salt = response.body;
        AppLogger.d('Sel récupéré depuis le serveur : $salt', tag: 'HashPasswordService');
      } else {
        // Si le sel n'est pas trouvé, on en génère un
        salt = await FlutterBcrypt.saltWithRounds(rounds: 12);
        AppLogger.d('Sel généré : $salt', tag: 'HashPasswordService');
      }

      // Hachage du mot de passe avec le sel
      final String hashedPassword = await FlutterBcrypt.hashPw(password: password, salt: salt);
      AppLogger.d('Mot de passe haché avec succès', tag: 'HashPasswordService');
      return hashedPassword;
    } catch (e, stackTrace) {
      AppLogger.e('Erreur lors du hachage du mot de passe', error: e, stackTrace: stackTrace, tag: 'HashPasswordService');
      throw Exception('Erreur lors du hachage du mot de passe.');
    }
  }

  Future<bool> verifyPassword(String password, String hashedPassword) async {
    try {
      AppLogger.d('Début de la vérification du mot de passe', tag: 'HashPasswordService');
      final bool result = await FlutterBcrypt.verify(password: password, hash: hashedPassword);
      AppLogger.d('Résultat de la vérification : $result', tag: 'HashPasswordService');
      return result;
    } catch (e, stackTrace) {
      AppLogger.e('Erreur lors de la vérification du mot de passe', error: e, stackTrace: stackTrace, tag: 'HashPasswordService');
      throw Exception('Erreur lors de la vérification du mot de passe.');
    }
  }

}
