import 'package:flutter_secure_storage/flutter_secure_storage.dart';

/// Classe pour gérer le stockage sécurisé dans l'application.
/// Utilise FlutterSecureStorage pour stocker, lire et supprimer des données sensibles.
class SecureStorage {
  // Instance de FlutterSecureStorage pour gérer le stockage sécurisé
  final FlutterSecureStorage _storage = const FlutterSecureStorage();

  /// Écrit une valeur dans le stockage sécurisé avec la clé spécifiée.
  Future<void> write(String key, String value) async {
    print("Écriture dans le stockage sécurisé : clé = $key, valeur = $value");
    await _storage.write(key: key, value: value);
    print("Écriture réussie pour la clé : $key");
  }

  /// Lit une valeur depuis le stockage sécurisé en fonction de la clé spécifiée.
  Future<String?> read(String key) async {
    print("Lecture dans le stockage sécurisé pour la clé : $key");
    final value = await _storage.read(key: key);
    print("Valeur lue pour la clé $key : $value");
    return value;
  }

  /// Supprime une entrée dans le stockage sécurisé pour la clé spécifiée.
  Future<void> delete(String key) async {
    print("Suppression dans le stockage sécurisé pour la clé : $key");
    await _storage.delete(key: key);
    print("Suppression réussie pour la clé : $key");
  }

  /// Sauvegarde l'identifiant utilisateur dans le stockage sécurisé.
  Future<void> saveUserId(String userId) async {
    print("Sauvegarde de l'userId dans le stockage sécurisé : $userId");
    await write('user_id', userId);
    print("Sauvegarde réussie de l'userId.");
  }

  /// Récupère l'identifiant utilisateur depuis le stockage sécurisé.
  Future<String?> getUserId() async {
    print("Récupération de l'userId depuis le stockage sécurisé.");
    return await read('user_id');
  }

  /// Sauvegarde le nom d'utilisateur dans le stockage sécurisé.
  Future<void> saveUserName(String userName) async {
    print("Sauvegarde du userName dans le stockage sécurisé : $userName");
    await write('user_name', userName);
    print("Sauvegarde réussie du userName.");
  }

  /// Récupère le nom d'utilisateur depuis le stockage sécurisé.
  Future<String?> getUserName() async {
    print("Récupération du userName depuis le stockage sécurisé.");
    return await read('user_name');
  }

  /// Sauvegarde le prénom de l'utilisateur dans le stockage sécurisé.
  Future<void> saveUserLastName(String userLastName) async {
    print("Sauvegarde du userLastName dans le stockage sécurisé : $userLastName");
    await write('user_last_name', userLastName);
    print("Sauvegarde réussie du userLastName.");
  }

  /// Récupère le prénom de l'utilisateur depuis le stockage sécurisé.
  Future<String?> getUserLastName() async {
    print("Récupération du userLastName depuis le stockage sécurisé.");
    return await read('user_last_name');
  }

  /// Supprime toutes les informations utilisateur du stockage sécurisé.
  Future<void> deleteUserInfo() async {
    print("Suppression des informations utilisateur (userId, userName, userLastName).");
    await delete('user_id');
    await delete('user_name');
    await delete('user_last_name');
    print("Suppression réussie des informations utilisateur.");
  }
}
