package db

import (
	"database/sql"
	"time"

	"github.com/go-sql-driver/mysql"
	"github.com/spf13/viper"
)

var db *sql.DB

const maxConnectionTime = time.Minute * 3
const maxOpenConns = 1000
const maxIdleConns = 1000

func GetDB() *sql.DB {
	if db != nil {
		return db
	}
	cfg := mysql.Config{
		User:                 viper.GetString("db.user"),
		Passwd:               viper.GetString("db.password"),
		Net:                  "tcp",
		Addr:                 viper.GetString("db.address"),
		DBName:               viper.GetString("db.database"),
		AllowNativePasswords: true,
	}
	db1, err := sql.Open("mysql", cfg.FormatDSN())
	db = db1
	if err != nil {
		panic(err)
	}
	// See "Important settings" section.
	db.SetConnMaxLifetime(time.Minute * 3)
	db.SetMaxOpenConns(10)
	db.SetMaxIdleConns(10)
	return db
}
