package config

import (
	"os"
	"path/filepath"

	"gopkg.in/yaml.v3"
)

// DefaultConfig 返回 SunHPC 的默认配置结构体
func DefaultConfig() *Config {
	return &Config{
		DB: DBConfig{
			Type:     "sqlite",
			Path:     "/var/lib/sunhpc", // SQLite 数据库存放目录
			Name:     "sunhpc.db",       // 数据库文件名
			User:     "",                // SQLite 不需要
			Password: "",
			Host:     "",
			Port:     0,
			Socket:   "",
			Verbose:  false,
		},
		Log: LogConfig{
			Level:    "info",
			Format:   "text", // or "json"
			Output:   "stdout",
			FilePath: "/var/log/sunhpc/sunhpc.log",
		},
		Cluster: ClusterConfig{
			Name:       "default-cluster",
			AdminEmail: "admin@example.com",
			TimeZone:   "Asia/Shanghai",
			NodePrefix: "node",
		},
	}
}

// WriteDefaultConfig 将默认配置写入指定路径
// 如果目录不存在，会自动创建（需有权限）
// 如果文件已存在且非空，会返回错误（除非调用方先删除）
func WriteDefaultConfig(path string) error {
	// 确保目录存在
	dir := filepath.Dir(path)
	if err := os.MkdirAll(dir, 0755); err != nil {
		return err
	}

	// 生成默认配置
	cfg := DefaultConfig()

	// 序列化为 YAML
	data, err := yaml.Marshal(cfg)
	if err != nil {
		return err
	}

	// 写入文件（0644 权限）
	return os.WriteFile(path, data, 0644)
}
