package app

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"miniapp/api"
	"miniapp/global"
	"miniapp/model/app"
	"miniapp/model/common"
	"miniapp/model/common/request"
	r "miniapp/model/common/response"
	"strconv"
	"time"
)

type TodosApi struct{}

func (t TodosApi) GetUserTodos(ctx *gin.Context) {
	var p request.GetUserNotes
	if err := ctx.ShouldBind(&p); err != nil {
		r.FailWithMessage("参数错误:"+err.Error(), ctx)
		global.GVA_LOG.Error("参数错误", zap.Error(err))
		return
	}

	var ue app.User
	if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() {
		return
	}

	p.UserId = strconv.Itoa(int(ue.ID))
	list, err := todosService.GetUserTodos(&p)
	if err != nil {
		r.FailWithMessage("获取Todo列表失败:"+err.Error(), ctx)
		global.GVA_LOG.Error("获取Todo列表失败", zap.Error(err))
		return
	}

	r.OkWithData(list, ctx)
}

// UpdateTodo 更新Todo
func (t TodosApi) UpdateTodo(ctx *gin.Context) {
	var todo common.UserTodo
	if err := ctx.ShouldBind(&todo); err != nil {
		r.FailWithMessage("参数错误:"+err.Error(), ctx)
		global.GVA_LOG.Error("参数错误", zap.Error(err))
		return
	}

	// 更新
	err := todosService.UpdateTodoById(&todo)
	if err != nil {
		r.FailWithMessage(err.Error(), ctx)
		global.GVA_LOG.Error("更新失败", zap.Error(err))
		return
	}
	r.Ok(ctx)
}

// GetTodayTodos 获取今日待办
func (t TodosApi) GetTodayTodos(ctx *gin.Context) {
	var p request.GetUserNotes
	if err := ctx.ShouldBind(&p); err != nil {
		r.FailWithMessage("参数错误:"+err.Error(), ctx)
		global.GVA_LOG.Error("参数错误", zap.Error(err))
		return
	}

	var ue app.User
	if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() {
		return
	}

	p.UserId = strconv.Itoa(int(ue.ID))
	list, err := todosService.GetTodayTodos(&p)
	if err != nil {
		r.FailWithMessage("获取Todo列表失败:"+err.Error(), ctx)
		global.GVA_LOG.Error("获取Todo列表失败", zap.Error(err))
		return
	}

	todos := make([]common.UserTodo, 0)
	hour := time.Now().Hour()
	for i := range list {
		//将remind_time截取前两位 转为int
		rt, _ := strconv.Atoi(list[i].RemindTime[:2])
		rt2 := 24

		if i+1 == len(list) {
			rt2, _ = strconv.Atoi(list[len(list)-1].RemindTime[:2])
		} else {
			rt2, _ = strconv.Atoi(list[i+1].RemindTime[:2])
		}
		if hour >= rt && hour <= rt2 {
			todos = append(todos, list[i])
		}
	}

	//删除todos第一个元素
	if len(todos) > 0 {
		todos = todos[1:]
	}

	r.OkWithData(todos, ctx)
}
