package md5_test

import (
	"in-server/pkg/lzkit/md5"
	"fmt"
	"log"
)

func Example() {
	// 简单的字符串MD5
	hashValue := md5.EncryptString("hello world")
	fmt.Println("MD5(hello world):", hashValue)

	// 使用链式API
	chainHash := md5.New().
		Add("hello").
		Add(" ").
		Add("world").
		Sum()
	fmt.Println("链式MD5:", chainHash)

	// 使用盐值
	saltedHash := md5.EncryptStringWithSalt("password123", "main@example.com")
	fmt.Println("加盐MD5:", saltedHash)

	// 验证哈希
	isValid := md5.VerifyMD5("hello world", hashValue)
	fmt.Println("验证结果:", isValid)

	// 生成短版本的MD5
	fmt.Println("16位MD5:", md5.Get16("hello world"))
	fmt.Println("8位MD5:", md5.Get8("hello world"))

	// 文件MD5计算
	filePath := "example.txt" // 这只是示例，实际上这个文件可能不存在
	fileHash, err := md5.EncryptFile(filePath)
	if err != nil {
		// 在实际代码中执行正确的错误处理
		log.Printf("计算文件MD5出错: %v", err)
	} else {
		fmt.Println("文件MD5:", fileHash)
	}

	// HMAC-MD5
	hmacHash := md5.MD5HMAC("重要消息", "secret-key")
	fmt.Println("HMAC-MD5:", hmacHash)
}

func ExampleEncryptString() {
	hash := md5.EncryptString("HelloWorld")
	fmt.Println(hash)
	// Output: 68e109f0f40ca72a15e05cc22786f8e6
}

func ExampleMD5_Sum() {
	hash := md5.New().
		Add("Hello").
		Add("World").
		Sum()
	fmt.Println(hash)
	// Output: 68e109f0f40ca72a15e05cc22786f8e6
}

func ExampleEncryptStringWithSalt() {
	// 为用户密码加盐，通常使用用户唯一标识(如邮箱)作为盐值
	hash := md5.EncryptStringWithSalt("password123", "main@example.com")
	fmt.Println("盐值哈希长度:", len(hash))
	fmt.Println("是否为有效哈希:", md5.VerifyMD5WithSalt("password123", "main@example.com", hash))
	// Output:
	// 盐值哈希长度: 32
	// 是否为有效哈希: true
}

func ExampleGet16() {
	// 获取16位MD5，适合不需要完全防碰撞场景
	hash := md5.Get16("HelloWorld")
	fmt.Println(hash)
	// Output: f0f40ca72a15e05c
}
