package admin

import (
	"errors"
	"github.com/kataras/iris/v12"
	"github.com/sirupsen/logrus"
	"main/database"
	"main/model"
	"main/utils"
)

func getMenu(ctx iris.Context) {
	err := ctx.JSON(utils.FormatRes(iris.StatusOK, "", utils.MenuList))
	if utils.ErrHandle(ctx, err) {
		return
	}
}

func addMenu(ctx iris.Context) {
	var param model.Menus
	err := ctx.ReadJSON(&param)
	if utils.ErrHandle(ctx, err) || utils.DataIsNil(param) {
		return
	}
	if (len(param.MenuId) != 3 && len(param.MenuId) != 5) || param.MenuId[0:3] == "000" {
		utils.ErrHandle(ctx, errors.New("菜单ID格式错误"))
		return
	}
	if checkMenuExist(param) {
		utils.ErrHandle(ctx, errors.New("菜单ID已存在"))
		return
	}
	db := database.GetInstance().GetMysqlDb()
	if err1 := db.Create(&param).Error; err1 != nil {
		logrus.Errorln("sql执行失败：", err1)
	}
	err = ctx.JSON(utils.FormatRes(iris.StatusOK, "", "success"))
	if utils.ErrHandle(ctx, err) {
		return
	}
	utils.UpdateMenuList()
}

func updateMenu(ctx iris.Context) {
	var param model.Menus
	err := ctx.ReadJSON(&param)
	if utils.ErrHandle(ctx, err) || utils.DataIsNil(param) {
		return
	}
	if (len(param.MenuId) != 3 && len(param.MenuId) != 5) || param.MenuId[0:3] == "000" {
		utils.ErrHandle(ctx, errors.New("菜单ID格式错误"))
		return
	}
	if !checkMenuIDExist(param) || checkMenuExist(param) {
		utils.ErrHandle(ctx, errors.New("菜单ID已存在"))
		return
	}
	db := database.GetInstance().GetMysqlDb()
	if err1 := db.Save(&param).Error; err1 != nil {
		logrus.Errorln("sql执行失败：", err1)
	}
	err = ctx.JSON(utils.FormatRes(iris.StatusOK, "", "success"))
	if utils.ErrHandle(ctx, err) {
		return
	}
	utils.UpdateMenuList()
}

func deleteMenu(ctx iris.Context) {
	menuId := ctx.URLParam("menu_id")
	db := database.GetInstance().GetMysqlDb()
	utils.UpdateMenuList()
	for _, menu := range utils.MenuList {
		if menu.MenuId == menuId || menu.MenuId[0:3] == menuId {
			if err := db.Delete(&menu).Error; err != nil {
				logrus.Errorln("sql执行失败：", err)
			}
		}
	}
	err := ctx.JSON(utils.FormatRes(iris.StatusOK, "", "success"))
	if utils.ErrHandle(ctx, err) {
		return
	}
	utils.UpdateMenuList()
}

func checkMenuExist(menu model.Menus) bool {
	for _, m := range utils.MenuList {
		if menu.MenuId == m.MenuId && menu.ID != m.ID {
			return true
		}
	}
	return false
}

func checkMenuIDExist(menu model.Menus) bool {
	for _, m := range utils.MenuList {
		if menu.ID == m.ID {
			return true
		}
	}
	return false
}
