package register

import (
	"fmt"
	"time"

	"github.com/go-sql-driver/mysql"
	"go.uber.org/dig"

	"github.com/tidbcloud/tidb-management-service/serverless-global-service/pkg/config"
)

var globalDI *dig.Container

func init() {
	globalDI = dig.New()
}

func Provide(constructor any, options ...dig.ProvideOption) {
	if err := globalDI.Provide(constructor, options...); err != nil {
		panic(err)
	}
}

func DiCall(fn any, options ...dig.InvokeOption) error {
	return globalDI.Invoke(fn, options...)
}

func GetMysqlDefaultConfig() *mysql.Config {
	mysqlCfg := config.Global().MysqlConfig

	defaultConfig := mysql.NewConfig()

	defaultConfig.Net = "tcp"
	defaultConfig.User = mysqlCfg.User
	defaultConfig.Addr = fmt.Sprintf("%s:%d", mysqlCfg.Host, mysqlCfg.Port)
	defaultConfig.Passwd = mysqlCfg.Password
	defaultConfig.DBName = mysqlCfg.Database
	defaultConfig.ParseTime = true
	defaultConfig.Timeout = 60 * time.Second
	defaultConfig.ReadTimeout = 30 * time.Second
	defaultConfig.WriteTimeout = 30 * time.Second
	defaultConfig.Params = map[string]string{"charset": "utf8mb4"}
	defaultConfig.Collation = "utf8mb4_bin"
	defaultConfig.TLSConfig = mysqlCfg.TLSConfigKey

	return defaultConfig
}
