package cron

import (
	"epur-pay/pkg/logger"
	"epur-pay/pkg/mq"
	"epur-pay/pkg/rds"
	"epur-pay/pkg/utils"
	"github.com/robfig/cron"
	"gorm.io/gorm/clause"
	"reflect"
	"runtime"
)

var (
	Cron *cron.Cron
)

func New() {
	Cron = cron.New()
	Cron.Start()

	{
		/*
			每个月将任务表转移到历史数据表
		*/
		utils.Error(Cron.AddFunc("* * * * 7", MqStoreToHistory))
	}
}

func MqStoreToHistory() {

	defer func() {
		err := recover()
		if err != nil {
			buf := make([]byte, 1<<16)
			runtime.Stack(buf, true)
			e := reflect.ValueOf(err)
			logger.ErrorLogger.Errorln(e.String(), string(buf))
			//p.E = errors.New(string(buf))
		}
	}()

	rows := mq.AsyncTasks{}

	utils.DbErrSkipRecordNotFound(rds.DB.Raw(`select * from async_task where create_time < ?`, utils.Time2StampSecond()-6*24*60*60).Scan(&rows).Error)

	ids := []int64{}

	for _, item := range rows {
		ids = append(ids, item.Id)
	}

	if len(rows) > 0 {
		utils.Error(rds.DB.Table("async_task_history").Clauses(clause.OnConflict{DoNothing: true}).Create(&rows).Error)
	}

	if len(ids) > 0 {
		utils.Error(rds.DB.Exec(`delete from async_task where id in ?`, ids).Error)
	}
}