package dev.lions.utils;

import jakarta.enterprise.context.ApplicationScoped;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * Utilitaire pour l'encodage et chiffrement de données.
 */
@ApplicationScoped
public class EncryptionUtils {

  /**
   * Hachage d'une chaîne avec l'algorithme SHA-256.
   *
   * @param input La chaîne à hacher.
   * @return La chaîne hachée en Base64.
   * @throws RuntimeException si l'algorithme SHA-256 n'est pas disponible.
   */
  public String hashWithSHA256(String input) {
    try {
      MessageDigest digest = MessageDigest.getInstance("SHA-256");
      byte[] encodedHash = digest.digest(input.getBytes());
      return Base64.getEncoder().encodeToString(encodedHash);
    } catch (NoSuchAlgorithmException e) {
      throw new RuntimeException("SHA-256 Algorithm not found", e);
    }
  }

  /**
   * Encode une chaîne en Base64.
   *
   * @param input La chaîne à encoder.
   * @return La chaîne encodée en Base64.
   */
  public String encodeBase64(String input) {
    return Base64.getEncoder().encodeToString(input.getBytes());
  }

  /**
   * Décode une chaîne encodée en Base64.
   *
   * @param input La chaîne encodée.
   * @return La chaîne d'origine.
   */
  public String decodeBase64(String input) {
    return new String(Base64.getDecoder().decode(input));
  }
}
