package config

import (
	"log"
	"os"

	"github.com/spf13/viper"
)

var dataDir = "/app/data"

func Init() {
	if dir := os.Getenv("DATA_DIR"); dir != "" {
		dataDir = dir
	}
	if _, err := os.Stat(dataDir); os.IsNotExist(err) {
		os.MkdirAll(dataDir, 0755)
	}

	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(dataDir)
	viper.AddConfigPath(".")
	viper.AddConfigPath("./config")

	setDefaults()

	if err := viper.ReadInConfig(); err != nil {
		log.Printf("Warning: Config file not found, using defaults: %v", err)
	}

	viper.AutomaticEnv()
}

func GetDataDir() string {
	return dataDir
}

// setDefaults 设置默认配置值
func setDefaults() {
	// 应用配置
	viper.SetDefault("app.name", "verification-platform")
	viper.SetDefault("app.env", "development")
	viper.SetDefault("app.port", "8080")
	viper.SetDefault("app.jwt_secret", "your-secret-key")
	viper.SetDefault("app.jwt_expire", "24h")

	// 数据库配置
	viper.SetDefault("database.type", "auto")
	viper.SetDefault("database.host", "localhost")
	viper.SetDefault("database.port", "3306")
	viper.SetDefault("database.name", "verification_platform")
	viper.SetDefault("database.username", "root")
	viper.SetDefault("database.password", "")
	viper.SetDefault("database.charset", "utf8mb4")
	viper.SetDefault("database.max_idle_conns", "10")
	viper.SetDefault("database.max_open_conns", "100")

	// Redis配置
	viper.SetDefault("redis.host", "localhost")
	viper.SetDefault("redis.port", "6379")
	viper.SetDefault("redis.password", "")
	viper.SetDefault("redis.db", "0")

	// 日志配置
	viper.SetDefault("log.level", "info")
	viper.SetDefault("log.format", "json")
}

// GetString 获取字符串配置
func GetString(key string) string {
	return viper.GetString(key)
}

// GetInt 获取整数配置
func GetInt(key string) int {
	return viper.GetInt(key)
}

// GetBool 获取布尔配置
func GetBool(key string) bool {
	return viper.GetBool(key)
}

// GetStringSlice 获取字符串切片配置
func GetStringSlice(key string) []string {
	return viper.GetStringSlice(key)
}
