package config

import (
	"os"
	"sync"

	"gopkg.in/yaml.v3"
)

// Config 配置结构
type Config struct {
	Port                 string  `yaml:"port"`                   // 端口号
	TimerInterval        int     `yaml:"timer_interval"`         // 定时任务间隔
	APIRateLimit         int     `yaml:"api_rate_limit"`         // API请求限制
	CallbackURL          string  `yaml:"callback_url"`           // 回调地址
	NewPrice             float64 `yaml:"new_price"`              // 新价格
	PlaceholderDownPrice float64 `yaml:"placeholder_down_price"` // 占位降价
	MinShippingFee       float64 `yaml:"min_shipping_fee"`       // 最低运费
	MinPrice             float64 `yaml:"min_price"`              // 最低书价
	QueryIndex           int     `yaml:"query_index"`            // 想排第几位
}

// Load 加载配置文件
func Load(path string) (*Config, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}

	var cfg Config
	if err := yaml.Unmarshal(data, &cfg); err != nil {
		return nil, err
	}

	return &cfg, nil
}

// Save 保存配置文件
func Save(path string, cfg *Config) error {
	data, err := yaml.Marshal(cfg)
	if err != nil {
		return err
	}

	return os.WriteFile(path, data, 0644)
}

// GlobalConfig 全局配置
var (
	_globalConfig *Config
	_globalMu     sync.RWMutex
)

// SetGlobal 设置全局配置
func SetGlobal(cfg *Config) {
	_globalMu.Lock()
	defer _globalMu.Unlock()
	_globalConfig = cfg
}

// GetGlobal 获取全局配置
func GetGlobal() *Config {
	_globalMu.RLock()
	defer _globalMu.RUnlock()
	return _globalConfig
}
