package db

import (
	"log"
	"strings"
	"time"

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

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

var db *gorm.DB

func getDate(time string) string {
	date, _, _ := strings.Cut(time, " ")
	return date
}
func generateDSNStringFromConfig() string {
	dsnString := ""
	dsnString += viper.GetString("db.user")
	passwd := viper.GetString("db.password")
	if passwd != "" {
		dsnString += (":" + passwd)
	}
	dsnString += ("@tcp" + "(" + viper.GetString("db.address") + ")")
	dsnString += ("/" + viper.GetString("db.database"))
	dsnString += "?parseTime=True&loc=UTC"
	return dsnString
}

func getDB() (*gorm.DB, error) {
	/*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"),
	}*/
	dsn := generateDSNStringFromConfig()
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Println(err)
		return nil, err
	}
	sqlDb, err := db.DB()
	if err != nil {
		log.Println(err)
		return nil, err
	}
	sqlDb.SetConnMaxLifetime(1 * time.Minute)
	return db, nil
}

func GetDB() (*gorm.DB, error) {
	return getDB()
}
