package config

import (
	"matrix-middle-service/pkg/config/database"
	"matrix-middle-service/pkg/config/jwt"
	"matrix-middle-service/pkg/config/nanoid"
	"matrix-middle-service/pkg/config/sonyflake"
	"matrix-middle-service/pkg/database/driver/mysql/conf"
)

type Conf struct {
	Server       *ServerConfig     `comment:"服务器配置"`
	DataSources  []interface{}     `comment:"数据源配置"`
	NanoIdConfig *nanoid.Config    `comment:"nanoId 配置"`
	JwtConfig    *jwt.Config       `comment:"jwt 配置"`
	SonyFlake    *sonyflake.Config `comment:"sonyFlake 配置"`
}

type ServerConfig struct {
	Addr          string `yaml:"addr" comment:"监听 地址:端口"`
	PreFork       bool   `yaml:"preFork" comment:"是否开启多进程"`
	CaseSensitive bool   `yaml:"caseSensitive" comment:"路由 大小写严格"`
	// 严格路由 例: 设置为 true 时, /foo != /foo/
	StrictRouting bool `yaml:"strictRouting" comment:"严格路由模式"`
	// 设置 Http 请求头中的 Server 名称
	ServerHeader string `yaml:"serverHeader" comment:"服务器名称"`
	// 是否添加 /routes 路由 用于获取所有路由信息
	EnableRoutesMsg bool `yaml:"enableRoutesMsg" comment:"启用路由信息 /routes"`
	EnableSwag      bool `yaml:"enableSwag" comment:"是否启用 swag 访问路径: /swagger"`
}

func DefaultConfig() *Conf {
	return &Conf{
		Server: &ServerConfig{
			Addr:            ":6573",
			PreFork:         true,
			CaseSensitive:   true,
			StrictRouting:   false,
			ServerHeader:    "SkServer",
			EnableRoutesMsg: false,
		},
		DataSources: []interface{}{
			database.DataSourcesType[any]{
				Type: "mysql",
				Config: conf.NewMysqlConfig([]string{
					"root:12341234@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai",
				}, true),
			},
		},
		NanoIdConfig: &nanoid.Config{
			Sequence: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
			Length:   36,
		},
		JwtConfig: &jwt.Config{
			Secret: "1234567890",
			Expire: 7200,
		},
		SonyFlake: &sonyflake.Config{
			StartTime: sonyflake.DefaultSonyFlakeStartTime,
		},
	}
}
