package global

import (
	"database/sql"
	"fmt"
	"log"
	"time"

	"xugu_license/internal/module/capture"
	_ "xugu_license/pkg/xugu"
)

var XuguDB *sql.DB
var OaDB *sql.DB
var Cfg *Config

//var LicCache *license_cache.Cache

func InitDb() {
	Cfg = LoadConfig("./config.toml")
	fmt.Println("Cfg", Cfg)
	licDbstr := fmt.Sprintf("IP=%s;DB=%s;User=%s;PWD=%s;Port=%s;AUTO_COMMIT=on;CHAR_SET=UTF8",
		Cfg.Database.LicDBIP,
		Cfg.Database.LicDBDb,
		Cfg.Database.LicDBUser,
		Cfg.Database.LicDBPass,
		Cfg.Database.LicDBPort)
	oaDbstr := fmt.Sprintf("IP=%s;DB=%s;User=%s;PWD=%s;Port=%s;AUTO_COMMIT=on;CHAR_SET=UTF8",
		Cfg.Database.OADBIP,
		Cfg.Database.OADBDb,
		Cfg.Database.OADBUser,
		Cfg.Database.OADBPass,
		Cfg.Database.OADBPort)
		
	var err error
	XuguDB, err = sql.Open("xugusql", licDbstr)
	if err != nil {
		log.Fatal("XuguDB err ", err)
	}
	XuguDB.SetConnMaxLifetime(time.Hour) // 设置连接的最大生命周期
	// 启动定时任务保活
	//go keepDBAlive(XuguDB)
	//IP=10.28.20.111;DB=ECOLOGY2;User=XUGU;PWD=oatest@2024;Port=5148;AUTO_COMMIT=on;CHAR_SET=UTF8
	//IP=10.28.20.150;DB=oadb;User=SYSDBA;PWD=SYSDBA;Port=5199;AUTO_COMMIT=on;CHAR_SET=UTF8
	OaDB, err = sql.Open("xugusql", oaDbstr)
	if err != nil {
		log.Fatal("OaDB err ", err)
	}
	if err := OaDB.Ping(); err != nil {
		log.Fatal("OaDB ping err ", err)
	}
	OaDB.SetConnMaxLifetime(time.Hour) // 设置连接的最大生命周期

	// 启动定时数据同步服务
	go capture.StartCapture(OaDB, XuguDB)

	//license缓存
	// layout := "2006-01-02 15:04:05"
	// startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
	// endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
	// LicCache = license_cache.NewCache()
	// err = LicCache.LoadDataFromDB(XuguDB, startTime, endTime, 0, 20)
	// if err != nil {
	// 	fmt.Println("license缓存初始化失败", err)
	// }
	// fmt.Println("license缓存初始化完成", LicCache.GetData())
}

func keepDBAlive(db *sql.DB) {
	ticker := time.NewTicker(5 * time.Minute)
	defer ticker.Stop()
	for range ticker.C {
		err := db.Ping()
		if err != nil {
			log.Println("数据库连接丢失,重试中...")
			// 处理重连逻辑
		} else {
			log.Println("数据库连接正常")
		}
	}
}