package config

import (
	"encoding/json"
	"os"
)

// Config 配置文件结构体
type Config struct {
	Fluentd       FluentdConfig       `json:"fluentd"`
	Elasticsearch ElasticsearchConfig `json:"elasticsearch"`
}

// FluentdConfig Fluentd 配置
type FluentdConfig struct {
	URL string `json:"url"`
}

// ElasticsearchConfig Elasticsearch 配置
type ElasticsearchConfig struct {
	URL  string     `json:"url"`
	Auth AuthConfig `json:"auth"`
	ILM  ILMConfig  `json:"ilm"`
}

// AuthConfig 认证信息
type AuthConfig struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

// ILMConfig ILM 配置
type ILMConfig struct {
	DataTypes map[string]DataTypeConfig `json:"data_types"`
}

// DataTypeConfig 每种数据类型的 ILM 配置
type DataTypeConfig struct {
	IndexPattern   string            `json:"index_pattern"`
	MaxRetention   map[string]int    `json:"max_retention"`
	MinRetention   int               `json:"min_retention"`
	Shards         int               `json:"shards"`
	Replicas       int               `json:"replicas"`
	NormalRollover map[string]string `json:"normal_rollover"`
	NormalPhases   map[string]int    `json:"normal_phases"`
}

// LoadConfig 加载配置文件
func LoadConfig(path string) (*Config, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return nil, err
	}
	var config Config
	if err := json.Unmarshal(data, &config); err != nil {
		return nil, err
	}
	return &config, nil
}