package config

import (
	"fmt"
	"os"

	"gopkg.in/yaml.v3"
)

type Config struct {
	Bot      BotConfig      `yaml:"bot"`
	Admins   []int64        `yaml:"admins"`
	Channel  ChannelConfig  `yaml:"channel"`
	Database DatabaseConfig `yaml:"database"`
	TOC      TOCConfig      `yaml:"toc"`
}

type BotConfig struct {
	Token string `yaml:"token"`
}

type ChannelConfig struct {
	ID int64 `yaml:"id"`
}

type DatabaseConfig struct {
	Path string `yaml:"path"`
}

type TOCConfig struct {
	DebounceSeconds int    `yaml:"debounce_seconds"`
	CoverImage      string `yaml:"cover_image"` // 封面图片路径，留空则不使用图片
}

func Load(path string) (*Config, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, fmt.Errorf("failed to read config file: %w", err)
	}

	var cfg Config
	if err := yaml.Unmarshal(data, &cfg); err != nil {
		return nil, fmt.Errorf("failed to parse config: %w", err)
	}

	if cfg.Bot.Token == "" {
		return nil, fmt.Errorf("bot token is required")
	}

	if cfg.Database.Path == "" {
		cfg.Database.Path = "./data/bot.db"
	}

	if cfg.TOC.DebounceSeconds <= 0 {
		cfg.TOC.DebounceSeconds = 3
	}

	return &cfg, nil
}

func (c *Config) IsAdmin(userID int64) bool {
	for _, id := range c.Admins {
		if id == userID {
			return true
		}
	}
	return false
}

// IsSuperAdmin 检查是否为超级管理员（配置文件中的管理员）
func (c *Config) IsSuperAdmin(userID int64) bool {
	for _, id := range c.Admins {
		if id == userID {
			return true
		}
	}
	return false
}
