package db

import (
	"database/sql"
	"log"
	"sync"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var once sync.Once

// dsn := "root:@tcp(localhost:3306)/jira?charset=utf8mb4&parseTime=True&loc=Local"

type Option func(sqldb *sql.DB)

func SetMaxIdleConns(ct int) Option {
	return func(sqldb *sql.DB) {
		if ct == 0 {
			return
		}
		sqldb.SetMaxIdleConns(ct)
	}
}

func SetMaxOpenConns(ct int) Option {
	return func(sqldb *sql.DB) {
		if ct == 0 {
			return
		}
		sqldb.SetMaxOpenConns(ct)
	}
}

func InitDb(dns string, opts ...Option) (db *gorm.DB, err error) {
	once.Do(func() {
		db, err = gorm.Open(mysql.Open(dns), &gorm.Config{
			SkipDefaultTransaction: true,
			PrepareStmt:            true,
		})
		sqlDB, err := db.DB()
		if err != nil {
			log.Fatal(err)
		}

		for _, opt := range opts {
			opt(sqlDB)
		}
	})

	return
}
