package slowquery

import (
	"github.com/pingcap/dbaas/pkg/gormutil"
	"github.com/pingcap/log"
	"github.com/tidbcloud/central-sdk/config"
	"gorm.io/gorm"
)

const slowQueryTLSKey = "slowquery"

func NewQueryDB(cfg config.MysqlConfig, logDetail bool, logLevel string) (*gorm.DB, error) {
	globalTopSQLTLSConfig := config.LoadTopSQLTLS()

	gormConfig := gormutil.Config{
		User:              cfg.User,
		Host:              cfg.Host,
		Database:          cfg.Database,
		Password:          cfg.Password,
		Port:              cfg.Port,
		EnableDetailedLog: logDetail,
		LogLevel:          logLevel,
		CACert:            globalTopSQLTLSConfig.TlsCA,
		ClientCert:        globalTopSQLTLSConfig.TlsCert,
		ClientKey:         globalTopSQLTLSConfig.TlsKey,
		TLSConfigKey:      slowQueryTLSKey,
	}

	if err := gormConfig.RegisterMutualTLSToDriver(); err != nil {
		return nil, err
	}

	if err := gormutil.EnsureConnectionDatabase(gormConfig); err != nil {
		return nil, err
	}

	db, err := gormutil.Connect(gormConfig)
	if err != nil {
		return nil, err
	}

	log.Info("Initialize slow query database successfully")
	return db, nil
}
