package task

import (
	"go.uber.org/zap"
	"miniapp/global"
	"miniapp/model/app"
	"miniapp/model/common"
	"strconv"
	"strings"
	"time"
)

// CheckUserSurgeryDate 检查用户是否已到手术日期
func CheckUserSurgeryDate() {
	go func() {
		global.GVA_LOG.Info("检查用户是否已到手术日期")
		var users []app.User
		global.GVA_DB.Model(&app.User{}).Find(&users)
		for _, user := range users {
			parse, _ := time.Parse("2006-01-02", user.SurgeryTime)
			if time.Now().Sub(parse).Hours()/24 == 0 {
				global.GVA_DB.Model(&app.User{}).Where("id = ?", user.ID).Updates(app.User{IsSurgery: 1})
			}
		}
	}()
}

func SendMsg2User() {
	go func() {
		global.GVA_LOG.Info("执行发送消息定时任务")
		var ut []common.UserTodo
		err := global.GVA_DB.Model(&common.UserTodo{}).Find(&ut).Error
		if err != nil {
			global.GVA_LOG.Error("定时任务获取用户Todo列表失败：", zap.Error(err))
		}

		for _, todo := range ut {
			if strings.Compare(todo.RemindDay, time.Now().Format("2006-01-02")) == 0 {
				// 创建定时任务
				//WxTask := gocron.NewScheduler(time.Local)
				//Send(todo.UserId, todo.Content, todo.RemindTime, todo.Frequency)
				user := app.User{}
				err := global.GVA_DB.Model(&app.User{}).Where("id = ?", todo.UserId).Find(&user).Error
				if err != nil {
					global.GVA_LOG.Error("定时任务获取用户信息失败：%s", zap.Error(err))
					return
				}

				// 根据用户手术信息 发送提醒消息
				if user.IsSurgery == 0 && todo.RemindPeriod == 0 && todo.IsFinish == 0 {
					// 根据年月日时发送消息
					job, err := WxTask.Every(1).Day().At(todo.RemindTime).LimitRunsTo(1).Do(MiniappSendMsg, strconv.Itoa(int(user.ID)), strconv.Itoa(int(todo.ID)))
					//job, err := WxTask.Cron("0 30 23 30 3 2024").Do(MiniappSendMsg, strconv.Itoa(int(user.ID)), strconv.Itoa(int(todo.ID)))
					//job, err := WxTask.Every(1).Day().At("23:51").LimitRunsTo(1).Do(MiniappSendMsg, strconv.Itoa(int(user.ID)), strconv.Itoa(int(todo.ID)))
					job.Tag("sendMsg")
					if err != nil {
						global.GVA_LOG.Error("定时任务创建失败：%s", zap.Error(err))
						return
					}
					global.GVA_LOG.Info("定时发送消息任务创建成功")
				}
			}
		}
	}()

}
