package config

import (
	"os"
	"testing"

	"github.com/break/junhong_cmp_fiber/pkg/constants"
)

// BenchmarkGet 测试配置获取性能
func BenchmarkGet(b *testing.B) {
	// 设置配置文件路径
	_ = os.Setenv(constants.EnvConfigPath, "../../configs/config.yaml")
	defer func() { _ = os.Unsetenv(constants.EnvConfigPath) }()

	// 初始化配置
	_, err := Load()
	if err != nil {
		b.Fatalf("加载配置失败: %v", err)
	}

	b.Run("GetServer", func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			_ = Get().Server
		}
	})

	b.Run("GetRedis", func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			_ = Get().Redis
		}
	})

	b.Run("GetLogging", func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			_ = Get().Logging
		}
	})

	b.Run("GetMiddleware", func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			_ = Get().Middleware
		}
	})

	b.Run("FullConfigAccess", func(b *testing.B) {
		b.ResetTimer()
		for i := 0; i < b.N; i++ {
			cfg := Get()
			_ = cfg.Server.Address
			_ = cfg.Redis.Address
			_ = cfg.Logging.Level
			_ = cfg.Middleware.EnableRateLimiter
		}
	})
}
