using System;
using System.Security.Cryptography;
using System.Text;

namespace LevelCode.License.Security
{
    public static class HashService
    {
        // =========================
        // SHA-256 (string)
        // =========================
        public static string GerarSha256(string valor)
        {
            if (string.IsNullOrEmpty(valor))
                return null;

            using (SHA256 sha = SHA256.Create())
            {
                byte[] bytes = Encoding.UTF8.GetBytes(valor);
                byte[] hash = sha.ComputeHash(bytes);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("x2"));
                }

                return sb.ToString();
            }
        }

        // =========================
        // SHA-256 (byte[])
        // =========================
        public static string GerarSha256(byte[] dados)
        {
            if (dados == null || dados.Length == 0)
                return null;

            using (SHA256 sha = SHA256.Create())
            {
                byte[] hash = sha.ComputeHash(dados);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("x2"));
                }

                return sb.ToString();
            }
        }
    }
}
