package common

import (
	"fmt"

	"gorm.io/driver/postgres"
	"gorm.io/gorm"
)

// GetDataBaseClient 获取数据库链接
//
// 返回值
//   - 一个 gorm.DB 的指针
//   - 一个清理所有数据库相关数据的函数
func GetDataBaseClient() (*gorm.DB, func() error) {
	dsn := "host=localhost " +
		"user=gatekeeper " +
		"dbname=crimson " +
		"sslmode=disable " +
		"port=5432 " +
		"password=crimson " +
		"connect_timeout=20 "

	client, ero := gorm.Open(postgres.Open(dsn), &gorm.Config{})
	if ero != nil {
		fmt.Println("数据库链接建立失败")
		panic(ero)
	}

	poolCfg, ero := client.DB()
	if ero != nil {
		fmt.Println("获取数据库链接池失败")
		panic(ero)
	}

	poolCfg.SetConnMaxIdleTime(3)
	poolCfg.SetMaxOpenConns(10)

	return client, poolCfg.Close
}
