/*
 * @description: 后台项目相关
 * @Author: CP
 * @Date: 2020-09-23 09:46:21
 * @FilePath: \construction_management\web\backstage\project_bs.go
 */
package backstage

import (
	"fmt"

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

type ProjectBs struct {
	//框架-web应用上下文环境
	Ctx iris.Context
	// 需要用的service
	ServiceProject   services.ProjectService
	ServiceBackstage services.BackstageService
}

// // 保存项目管理员信息
// func (c *ProjectBs) PostSave() {
// 	ErrMsg := ""
// 	// 验证内容
// 	AccountData, err := c.ServiceProjectAccount.ValidRule(c.Ctx)
// 	if err != nil {
// 		ErrMsg = utils.FormValidError(err)
// 		comm.Redirect(c.Ctx.ResponseWriter(), "/account?errMsg="+ErrMsg)
// 	} else {
// 		// 获得更新用户ID
// 		id, err := c.Ctx.Values().GetInt("accountId")
// 		if err != nil {
// 			comm.Redirect(c.Ctx.ResponseWriter(), "/account?errMsg="+ErrMsg)
// 		}
// 		// 保存信息
// 		err = c.ServiceProjectAccount.Save(AccountData, id, 0)
// 		if err != nil {
// 			comm.Redirect(c.Ctx.ResponseWriter(), "/account?errMsg="+ErrMsg)
// 		}
// 		comm.Redirect(c.Ctx.ResponseWriter(), "/account?success=修改成功")
// 	}
// }

// @Summary 后台-项目列表相关
// @Tags 后台 - 项目
// @Accept  json
// @Produce  json
// @Param   page     body    int     true        "当前页数" 	default(蔡频)
// @Param   size     body    int    true        "每页数量"		default(123456)
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /backstage/project/list [get]
func (c *ProjectBs) GetList() {

	pageData, err := c.ServiceProject.ValidRulePage(c.Ctx)
	if err != nil {
		ErrMsg := utils.FormValidError(err)
		c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg})
		return
	}

	// 获得项目信息
	dataList := c.ServiceProject.GetList(pageData.Page, pageData.Size)
	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 *ProjectBs) Get() {

	AccountData, err := c.ServiceBackstage.ValidRuleProject(c.Ctx)
	if err != nil {
		ErrMsg := utils.FormValidError(err)
		c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg})
		return
	}
	// 获得项目ID
	projectIdInt, err := utils.GetDecryptId(AccountData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 获得项目信息
	ProjectData, err := c.ServiceProject.Get(projectIdInt)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": ProjectData,
		"msg":  "",
	})
}

// @Summary 后台-办事处列表和员工
// @Tags 后台 - 项目
// @Accept  json
// @Produce  json
// @Param   categoryId     body    string     true        "办事处ID"
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /backstage/project/cld [get]
func (c *ProjectBs) GetCld() {

	cldData := viewmodels.StaffCld{}
	err := c.Ctx.ReadForm(&cldData)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

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

	// 获得项目信息
	// c.ServiceBackstage.GetCldByCategoryId(categoryId)
	data, err := c.ServiceBackstage.GetCldByCategoryId(cldData.CategoryId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": data,
		"msg":  "",
	})
}

// @Summary 后台-新增项目
// @Tags 后台 - 项目
// @Accept  json
// @Produce  json
// @Param   code     body    string     true        "项目编号"
// @Param   name     body    string     true        "项目名称"
// @Param   categoryId     body    string     true        "办事处Id"
// @Param   category     body    string     true        "办事处"
// @Param   staffId     body    string     true        "负责人Id"
// @Param   staffName     body    string     true        "负责人"
// @Param   remark     body    string     true        "备注"
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /backstage/project/add [post]
func (c *ProjectBs) PostAdd() {

	projectData, err := c.ServiceBackstage.ValidRuleProjectAdd(c.Ctx)
	if err != nil {
		ErrMsg := utils.FormValidError(err)
		c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg})
		return
	}

	// 获得用户名称和办事处
	staffName, err := utils.GetBackstageKey(c.Ctx, "StaffName")
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	category, err := utils.GetBackstageKey(c.Ctx, "Category")
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	projectData.CreateName = staffName
	projectData.CreateCategory = category
	// 新增项目信息
	err = c.ServiceProject.Add(projectData)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": "",
		"msg":  "新增成功",
	})
}

// @Summary 后台-编辑项目
// @Tags 后台 - 项目
// @Accept  json
// @Produce  json
// @Param   id     body    string     true        "项目ID"
// @Param   name     body    string     true        "项目名称"
// @Param   insideCategoryId     body    string     true        "所在办事处Id"
// @Param   insideCategory     body    string     true        "所在办事处"
// @Param   categoryId     body    string     true        "办事处Id"
// @Param   category     body    string     true        "办事处"
// @Param   staffId     body    string     true        "负责人Id"
// @Param   staffName     body    string     true        "负责人"
// @Param   remark     body    string     true        "备注"
// @Success 200 {object} viewmodels.ProjectAccount "{code:0成功,data:viewmodels.ProjectAccount,msg:}"
// @Failure 400 {string} string	"{code:-1参数类错误,msg:错误信息}"
// @Router /backstage/project/save [post]
func (c *ProjectBs) PostSave() {
	projectData, err := c.ServiceBackstage.ValidRuleProjectSave(c.Ctx)
	if err != nil {
		ErrMsg := utils.FormValidError(err)
		c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg})
		return
	}

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

	// 新增项目信息
	err = c.ServiceProject.SaveBs(projectData, id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"data": "",
		"msg":  "编辑成功",
	})
}
