/*
 * @description:  管理员相关
 * @Author: CP
 * @Date: 2021-05-11 17:08:10
 * @FilePath: \construction_management\web\backstage\manager_bs.go
 */
package backstage

import (
	"fmt"

	"github.com/kataras/iris/v12"
	"go.mod/services"
	"go.mod/web/utils"
	"go.mod/web/viewmodels"
)

type ManagerBs struct {
	//框架-web应用上下文环境
	Ctx iris.Context
	// 需要用的service
	ServiceManager services.ManagerService
}

// @Summary 后台-管理员列表
// @Description 登录接口
// @Tags 后台 - 登录/登出
// @Accept  json
// @Produce  json
// @Param   staffName     body    string     true        "CLD账号" 	default(蔡频)
// @Param   password     body    string    true        "密码"		default(123456)
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /api/backstage/manager/List [get]
func (c *ManagerBs) GetList() {
	item, total := c.ServiceManager.GetAll()
	dataList := map[string]interface{}{
		"items": item,
		"total": total,
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "",
		"data": dataList,
	})
}

// @Summary 后台-项目列表相关
// @Tags 后台 - 项目
// @Accept  json
// @Produce  json
// @Param   id     body    int     true        "ID"
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /backstage/project [get]
func (c *ManagerBs) Get() {
	// 1.获得数据
	data := viewmodels.Manager{}
	if err := c.Ctx.ReadForm(&data); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	// 2.验证数据
	if err := data.ValidateGet(); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	// 3.获得项目ID
	id, err := utils.GetDecryptId(data.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 3-1.获得项目信息
	result := c.ServiceManager.Get(id)

	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": result,
		"msg":  "",
	})
}

// 获得管理员信息
func (c *ManagerBs) GetCurrentuser() {

	staffName, err := utils.GetBackstageKey(c.Ctx, "StaffName")
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	result, err := c.ServiceManager.GetCurrentManager(staffName)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": result,
		"msg":  "",
	})
}

// 更新后台成员信息
func (c *ManagerBs) PostUpdate() {
	// 1.获得数据
	data := viewmodels.Manager{}
	if err := c.Ctx.ReadJSON(&data); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	// 2.验证数据
	if err := data.ValidateUpdate(); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	id, err := utils.GetDecryptId(data.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}
	groupId, err := utils.GetDecryptId(data.GroupId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	if err := c.ServiceManager.Update(data, id, groupId); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	c.Ctx.JSON(iris.Map{"code": 0, "msg": "编辑成功"})
}

// @Summary 账号启用/禁用
// @Tags 项目设置-管理员
// @Description 账号启用/禁用
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   id     body    string     true        "账号ID" default(PcqqGsn1O0jBSmLqkuOTwQ)
// @Param   canLogin     body    int     true        "启用/禁用"
// @Success 200 {string} string "{code:0成功,-1参数类错误,data:viewmodels.ProjectAccount,msg:错误信息}"
// @Router /api/projectSetting/account/enable [post]
func (c *ManagerBs) PostEnable() {
	// 1.获得数据
	data := viewmodels.Manager{}
	if err := c.Ctx.ReadJSON(&data); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	// 2.验证数据
	if err := data.ValidateEnable(); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	// 账号ID校验
	id, err := utils.GetDecryptId(data.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "账号异常"})
		return
	}

	if err = c.ServiceManager.Enable(id, data.CanLogin); err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	c.Ctx.JSON(iris.Map{"code": 0, "msg": "操作成功"})
}
