package db

// import (
// 	"fmt"
// 	"log"
// 	"nearle/utils"
// 	"time"

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

// var DB *gorm.DB

// var (
// 	DB_DEV  *gorm.DB
// 	DB_LIVE *gorm.DB
// )

// func DevConnect() {

// 	var DBname string
// 	var Username string
// 	var Password string
// 	var Host string
// 	var Port string

// 	var err error

// 	Port, DBname, Password, Username, Host, _, _ = utils.DevConfig()

// 	dsn := Username + ":" + Password + "@tcp" + "(" + Host + ":" + Port + ")/" + DBname + "?" + "parseTime=true&loc=Local"

// 	DB_DEV, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
// 	if err != nil {
// 		log.Fatal("❌ Could not connect to Dev database:", err)
// 	}
// 	setupDB(DB_DEV)
// 	fmt.Println("✅ Connected to Dev Database")

// 	// var DBname string
// 	// var Username string
// 	// var Password string
// 	// var Host string
// 	// var Port string

// 	// Port, DBname, Password, Username, Host, _, _ = utils.DevConfig()

// 	// dsn := Username + ":" + Password + "@tcp" + "(" + Host + ":" + Port + ")/" + DBname + "?" + "parseTime=true&loc=Local"

// 	// for i := 0; i < 5; i++ {
// 	// 	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
// 	// 	if err == nil {
// 	// 		sqlDB, _ := db.DB()
// 	// 		sqlDB.SetMaxIdleConns(100)
// 	// 		sqlDB.SetMaxOpenConns(1000)
// 	// 		sqlDB.SetConnMaxLifetime(time.Hour)
// 	// 		err = sqlDB.Ping()
// 	// 		if err == nil {
// 	// 			log.Println("Successfully connected to the database.")
// 	// 			DB = db
// 	// 			return
// 	// 		}
// 	// 	}
// 	// 	log.Printf("Failed to connect to the database, retrying... (%d/5)\n", i+1)
// 	// 	time.Sleep(2 * time.Second)
// 	// }
// 	// // log.Fatal("Could not connect to the database:", err)

// 	// // database, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
// 	// // if err != nil {
// 	// // 	panic("Could not connect to the database")
// 	// // }

// }

// func setupDB(database *gorm.DB) {
// 	sqlDB, err := database.DB()
// 	if err != nil {
// 		log.Fatal("❌ Failed to get DB from GORM:", err)
// 	}
// 	sqlDB.SetMaxIdleConns(10)
// 	sqlDB.SetMaxOpenConns(100)
// 	sqlDB.SetConnMaxLifetime(30 * time.Minute)
// }

// // func LiveConnect() {

// // 	var DBname string
// // 	var Username string
// // 	var Password string
// // 	var Host string
// // 	var Port string

// // 	Port, DBname, Password, Username, Host, _, _ = utils.DevConfig()

// // 	dsn := Username + ":" + Password + "@tcp" + "(" + Host + ":" + Port + ")/" + DBname + "?" + "parseTime=true&loc=Local"

// // 	for i := 0; i < 5; i++ {
// // 		db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
// // 		if err != nil {
// // 			log.Printf("Failed to connect to the database, retrying... (%d/5)\n", i+1)
// // 			log.Println("Error:", err)
// // 			time.Sleep(2 * time.Second)
// // 			continue
// // 		}

// // 		sqlDB, err := db.DB()
// // 		if err != nil {
// // 			log.Println("Failed to get DB from GORM:", err)
// // 			time.Sleep(2 * time.Second)
// // 			continue
// // 		}

// // 		sqlDB.SetMaxIdleConns(10)
// // 		sqlDB.SetMaxOpenConns(100)
// // 		sqlDB.SetConnMaxLifetime(time.Hour)

// // 		if err = sqlDB.Ping(); err != nil {
// // 			log.Printf("Failed to ping database, retrying... (%d/5)\n", i+1)
// // 			log.Println("Error:", err)
// // 			time.Sleep(2 * time.Second)
// // 			continue
// // 		}

// // 		log.Println("Successfully connected to the database.")
// // 		DB = db
// // 		return
// // 	}

// // 	log.Fatal("Could not connect to the database after multiple attempts.")

// // }

// func LiveConnect() {

// 	var DBname string
// 	var Username string
// 	var Password string
// 	var Host string
// 	var Port string

// 	Port, DBname, Password, Username, Host, _, _ = utils.LiveConfig()

// 	// dsn := "zqbuvyrhhf:Package%40%123#@tcp(165.232.178.78:3306)/dbname?parseTime=true"

// 	dsn := Username + ":" + Password + "@tcp" + "(" + Host + ":" + Port + ")/" + DBname + "?" + "parseTime=true&loc=Local"

// 	//database, err := sql.Open("mysql", dsn)

// 	database, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
// 	if err != nil {
// 		panic("Could not connect to the database")
// 	}

// 	sqlDB, err := database.DB()
// 	if err != nil {
// 		log.Println("Failed to get DB from GORM:", err)
// 		panic("Could not connect to the database")

// 	}
// 	sqlDB.SetMaxIdleConns(100)
// 	sqlDB.SetMaxOpenConns(1000)
// 	sqlDB.SetConnMaxLifetime(time.Hour)

// 	if err = sqlDB.Ping(); err != nil {
// 		log.Println("Error:", err)
// 		panic("Could not connect to the database")
// 	}

// 	fmt.Println("Live Database Connected Successfully")
// 	DB = database

// }

// func CloseDB() {
// 	sqlDB, err := DB.DB()
// 	if err != nil {
// 		log.Println("Error retrieving sql.DB from GORM:", err)
// 		return
// 	}
// 	fmt.Println("Connection closed Successfully")
// 	sqlDB.Close() // This will close the connection pool

// }
