package config

type AppConfig struct {
	Name string `yaml:"name"`
}

type LogConfig struct {
	Debug      bool   `yaml:"debug"`
	MaxSize    int32  `yaml:"maxSize"`
	MaxBackups int32  `yaml:"maxBackups"`
	MaxAge     int32  `yaml:"maxAge"`
	Level      string `yaml:"level"`
}

type MetricConfig struct {
	Prometheus *struct {
		Address string `yaml:"address"`
		Port    int32  `yaml:"port"`
	} `yaml:"prometheus"`
}

type DBConfig struct {
	Etcd  *EtcdConfig             `yaml:"etcd"`
	MySQL map[string]*MySQLConfig `yaml:"mysql"`
	Mongo map[string]*MongoConfig `yaml:"mongo"`
	Redis *RedisConfig            `yaml:"redis"`
}

type EtcdConfig struct {
	Endpoints []string `yaml:"endpoints"`
}

type MySQLConfig struct {
	Dsn                string `yaml:"dsn"`
	MaxOpenConn        int32  `yaml:"maxOpenConn"`
	MaxIdleConn        int32  `yaml:"maxIdleConn"`
	ConnMaxLifetimeSec int32  `yaml:"connMaxLifetimeSec"`
	ConnMaxIdleTimeSec int32  `yaml:"connMaxIdleTimeSec"`
	LogLevel           string `yaml:"logLevel"`
}

type MongoConfig struct {
	URI string `yaml:"uri"`
}

type RedisConfig struct {
	Addr     string `yaml:"addr"`
	Password string `yaml:"password"`
	DB       int    `yaml:"db"`
}

type ServeConfig struct {
	Grpc *struct {
		Address string `yaml:"address"`
		Port    int32  `yaml:"port"`
		TTL     int64  `yaml:"ttl"`
	} `yaml:"grpc"`
	Socket *struct {
		Web *AddressConfig `yaml:"web"`
		Raw *AddressConfig `yaml:"raw"`
	} `yaml:"socket"`
	Http *AddressConfig `yaml:"http"`
}

type AddressConfig struct {
	Address string `yaml:"address"`
	Port    int32  `yaml:"port"`
}
