package topsql

import (
	"github.com/pingcap/dbaas/central/config"
	"github.com/pingcap/dbaas/pkg/gormutil"
	"github.com/pingcap/log"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

func NewTopSQLDB(cfg config.MysqlConfig) (*gorm.DB, error) {
	topsqlTLSConfig := config.LoadTopSQLTLS()
	serverConfig := config.Global().ServerConfig
	connectConfig := gormutil.Config{
		User:              cfg.User,
		Host:              cfg.Host,
		Database:          cfg.Database,
		Password:          cfg.Password,
		Port:              cfg.Port,
		EnableDetailedLog: serverConfig.EnableDBQueryLog,
		LogLevel:          serverConfig.LogLevel,
		CACert:            topsqlTLSConfig.TlsCA,
		ClientCert:        topsqlTLSConfig.TlsCert,
		ClientKey:         topsqlTLSConfig.TlsKey,
		TLSConfigKey:      "topsql",
	}
	if err := connectConfig.RegisterMutualTLSToDriver(); err != nil {
		log.Error("NewTopSQLDB: failed to register TLS to mysql Drive", zap.Error(err))
		return nil, err
	}
	db, err := gormutil.Connect(connectConfig)
	if err != nil {
		log.Error("NewTopSQLDB: failed to connect to Top SQL database", zap.Error(err))
		return nil, err
	}

	// TODO(dragonly): migration

	return db, nil
}
