package base

import (
	"fmt"
	"github.com/druidcaesa/gotool"
	_ "github.com/go-sql-driver/mysql"
	"log"
	"time"
	"ulink-admin/config"
	"ulink-admin/pkg/common"
	redisTool "ulink-admin/pkg/redistool"
	"xorm.io/xorm"
)

// X 全局DB
var (
	SqlDB   *xorm.Engine
	RedisDB *redisTool.RedisClient
)

func init() {
	var err error
	//配置mysql数据库
	mysql := config.GetMysqlCfg()
	jdbc := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
		mysql.Username, mysql.Password, mysql.Host, mysql.Port, mysql.Database)
	SqlDB, err = xorm.NewEngine(mysql.ShowType, jdbc)

	if err != nil {
		log.Fatalf("db error: %#v\n", err.Error())
	}

	err = SqlDB.Ping()
	if err != nil {
		log.Printf("db connect error: %#v\n", err.Error())
	}
	SqlDB.SetMaxIdleConns(10)
	SqlDB.SetMaxOpenConns(100)
	timer := time.NewTicker(time.Minute * 30)
	go func(x *xorm.Engine) {
		for range timer.C {
			err = x.Ping()
			if err != nil {
				log.Fatalf("db connect error: %#v\n", err.Error())
			}
		}
	}(SqlDB)
	SqlDB.ShowSQL(true)
	if config.GetServerCfg().Redis {
		//初始化redis开始
		redisCfg := config.GetRedisCfg()
		redisOpt := common.RedisConnOpt{
			Enable:   true,
			Host:     redisCfg.RedisHost,
			Port:     int32(redisCfg.Port),
			Password: redisCfg.RedisPwd,
			Index:    int32(redisCfg.RedisDB),
			TTL:      240,
		}
		RedisDB = redisTool.NewRedis(redisOpt)
	}
	//配置redis结束
	//缓存初始化数据
	//saveCache()
}

func GetBeanByIdDesc(bean interface{}) {
	_, err := SqlDB.NewSession().Desc("id").Limit(1).Get(bean)
	if err != nil {
		gotool.Logs.ErrorLog().Println(err)
	}
}

// 初始化缓存数据
/*func saveCache() {
	initDict()
	initConfig()
}

func initDict() {
	//查询字典类型数据
	dictTypeDao := new(DictTypeDao)

	typeAll := dictTypeDao.FindAll()
	//所有字典数据
	d := new(DictDataDao)
	listData := d.GetDiceDataAll()
	m := new(model.SysDictData)
	for _, dictType := range typeAll {
		dictData := make([]model.SysDictData, 0)
		for _, data := range *listData {
			if dictType.DictType == data.DictType {
				dictData = append(dictData, data)
			}
		}
		RedisDB.SET(dictType.DictType, m.MarshalDictList(dictData))
	}
}

func initConfig() {
	//查询配置数据存入到缓存中
	configDao := new(ConfigDao)
	configSession := configDao.sql(SqlDB.NewSession())
	configs := make([]*model.SysConfig, 0)
	err := configSession.Find(&configs)
	if err != nil {
		gotool.Logs.ErrorLog().Println(err)
		return
	}
	m2 := new(model.SysConfig)
	for _, sysConfig := range configs {
		RedisDB.SET(sysConfig.ConfigKey, m2.Marshal(*sysConfig))
	}
}*/