package models

import (
	"fmt"
	"time"

	_ "gorm.io/driver/mysql"
	"gorm.io/driver/sqlite"
	_ "gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
)

// int类型代表是否的常量
const (
	INT_FALSE = iota
	INT_TURE
)

type BaseModel struct {
	gorm.Model
	// Db *gorm.DB `gorm:"_"`
	ID        uint      `gorm:"primarykey" json:"id"`
	CreatedAt time.Time `json:"createTime"`
	UpdatedAt time.Time `json:"updateTime"`
	// DeletedAt DeletedAt `gorm:"index"`
}

type BaseModelNoId struct {
	CreatedAt time.Time      `json:"createTime"`
	UpdatedAt time.Time      `json:"updateTime"`
	DeletedAt gorm.DeletedAt `gorm:"index"`
}

// 分页的结构体
type PageLimitStruct struct {
	PageSize  int `gorm:"-"` //
	LimitSize int `gorm:"-"` //
}

// 计算分页
func calcPage(page_size, limit_size int) (offset, limit int) {
	offset = limit_size * (page_size - 1)
	limit = limit_size
	return
}

var Db *gorm.DB

func GetDb() (*gorm.DB, error) {
	var db *gorm.DB
	var err error

	dbModels := []interface{}{
		&User{},
	}
	dbDrive := "mysql"

	if dbDrive == "mysql" {

		db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(dbModels...)
		sqlDb, _ := db.DB()
		sqlDb.SetMaxIdleConns(10)             // SetMaxIdleConns 设置空闲连接池中连接的最大数量
		sqlDb.SetMaxOpenConns(100)            // SetMaxOpenConns 设置打开数据库连接的最大数量。
		sqlDb.SetConnMaxLifetime(time.Minute) // SetConnMaxLifetime 设置了连接可复用的最大时间。

	} else {
		fmt.Println("数据库驱动:", "SQLite")
		db, err = gorm.Open(sqlite.Open("database.db"), &gorm.Config{
			NamingStrategy: schema.NamingStrategy{
				// TablePrefix:   "blog_",
				SingularTable: true,
			},
			// Logger: GetLogger(),
			// DisableForeignKeyConstraintWhenMigrating: true,
		})

		db.AutoMigrate(dbModels...)

	}

	Db = db
	return Db, err
}

// // 日志
// func GetLogger() logger.Interface {
// 	return logger.New(
// 		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
// 		logger.Config{
// 			SlowThreshold:             time.Second, // 慢 SQL 阈值
// 			LogLevel:                  logger.Warn, // 日志级别
// 			IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound(记录未找到)错误
// 			Colorful:                  true,        // 彩色打印
// 		},
// 	)

// }