package config

import (
	"os"
	"path/filepath"
	"strings"

	"gopkg.in/yaml.v3"
)

type Config struct {
	Env                   string   `yaml:"env"`
	Port                  string   `yaml:"port"`
	DSN                   string   `yaml:"dsn"`
	StorageDir            string   `yaml:"storage_dir"`
	AuthSecret            string   `yaml:"auth_secret"`
	SystemAIKey           string   `yaml:"system_ai_key"`
	AIKeyEncryptionSecret string   `yaml:"ai_key_encryption_secret"`
	AllowedOrigins        []string `yaml:"allowed_origins"`
}

func Load() Config {
	cfg, err := LoadFromDir("etc")
	if err != nil {
		panic(err)
	}
	return cfg
}

func LoadFromDir(configDir string) (Config, error) {
	mode := strings.TrimSpace(os.Getenv("SENLIN_APP_MODE"))
	if mode == "" {
		mode = "dev"
	}
	path := filepath.Join(configDir, "agent."+strings.ToLower(mode)+".yaml")
	data, err := os.ReadFile(path)
	if err != nil {
		return Config{}, err
	}
	var cfg Config
	if err := yaml.Unmarshal(data, &cfg); err != nil {
		return Config{}, err
	}
	return cfg, nil
}
