package kok

import (
	"crypto/hmac"
	"crypto/sha256"
	"fmt"
	"os"
	"time"
)

func Sifrele(s string) string {
	// Verileri birleştir
	dataToHash := s

	// Gizli anahtar (bu anahtar sizin tarafınızdan belirlenmeli)
	secretKey := []byte(os.Getenv("sifreleme_kiliti"))

	// HMAC-SHA256 kullanarak veri hashing
	hash := hmac.New(sha256.New, secretKey)
	hash.Write([]byte(dataToHash))
	hashedCode := hash.Sum(nil)

	// Hash kodu hex formatında döndürüyoruz
	return fmt.Sprintf("%x", hashedCode)
}

// HMAC ile Parola Doğrulama
func SifreDogrula(s, sifreliS string) bool {
	// Gizli anahtar (bunu gerçek bir uygulamada gizli tutun)
	secretKey := []byte(os.Getenv("sifreleme_kiliti"))

	// Parolayı HMAC-SHA256 ile hash'le
	hash := hmac.New(sha256.New, secretKey)
	hash.Write([]byte(s))
	calculatedHash := fmt.Sprintf("%x", hash.Sum(nil))

	// Hash'leri karşılaştır
	return sifreliS == calculatedHash
}

func epostaOnayKoduFonksiyonu(ad, soyad, kullaniciAdi string) string {
	// Bugün tarihine 1 gün ekleyelim
	a := time.Now().Add(24 * time.Hour)

	// Verileri birleştir
	dataToHash := ad + " " + soyad + kullaniciAdi + a.String()

	// Gizli anahtar (bu anahtar sizin tarafınızdan belirlenmeli)
	secretKey := []byte(os.Getenv("sifreleme_kiliti"))

	// HMAC-SHA256 kullanarak veri hashing
	hash := hmac.New(sha256.New, secretKey)
	hash.Write([]byte(dataToHash))
	hashedCode := hash.Sum(nil)

	// Hash kodu hex formatında döndürüyoruz
	return fmt.Sprintf("%x", hashedCode)
}

func parolaSifrele(parola string) string {
	// Verileri birleştir
	dataToHash := parola

	// Gizli anahtar (bu anahtar sizin tarafınızdan belirlenmeli)
	secretKey := []byte(os.Getenv("sifreleme_kiliti"))

	// HMAC-SHA256 kullanarak veri hashing
	hash := hmac.New(sha256.New, secretKey)
	hash.Write([]byte(dataToHash))
	hashedCode := hash.Sum(nil)

	// Hash kodu hex formatında döndürüyoruz
	return fmt.Sprintf("%x", hashedCode)
}

// HMAC ile Parola Doğrulama
func ParolaDogrula(parola, storedHash string) bool {
	// Gizli anahtar (bunu gerçek bir uygulamada gizli tutun)
	secretKey := []byte(os.Getenv("sifreleme_kiliti"))

	// Parolayı HMAC-SHA256 ile hash'le
	hash := hmac.New(sha256.New, secretKey)
	hash.Write([]byte(parola))
	calculatedHash := fmt.Sprintf("%x", hash.Sum(nil))

	// Hash'leri karşılaştır
	return storedHash == calculatedHash
}
