/*
 * @description: 附件相关的接口api
 * @Author: LanJianRong
 * @Date: 2020-12-07 10:26:49
 * @FilePath: \construction_management\web\api\annex_api.go
 */
package api

import (
	"fmt"
	"strconv"

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

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

// @Summary 获取附件列表
// @Tags 附件
// @Description 获得附件列表
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   dataType     path    int     true        "附件类型"
// @Param   dataId     path    string     true        "源数据id"
// @Param   pageNo     path    int     true        "页码" eg:1
// @Param   pageSize     path    int     true        "页数" eg:15
// @Success 200 {object} viewmodels.AnnexList "{code:0成功,data:viewmodels.AnnexList,msg:}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/file [get]
func (c *AnnexApi) Get() {
	// 1.规则验证
	annexData, err := c.ServiceAnnex.ValidRule(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	dataId, err := utils.GetDecryptId(annexData.DataId)
	dataType, err := strconv.Atoi(annexData.DataType)
	// data = c.ServiceAnnex.Get(dataType, dataId)
	// dataType, err := strconv.Atoi(annexData.DataType)
	data, total := c.ServiceAnnex.Get(dataType, dataId, annexData.PageNo, annexData.PageSize)
	c.Ctx.JSON(iris.Map{
		"code":  0,
		"msg":   "请求成功",
		"data":  data,
		"total": total,
	})
}

// @Summary 提交文件记录
// @Tags 附件
// @Description 提交文件记录
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   fileList     body    array     true        "附件数组"
// @Param   dataType     body    int     true        "类型" eg:"1"
// @Param   dataId     body    string     true        "数据id"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/file [post]
func (c *AnnexApi) Post() {
	// 1.规则验证
	annexData, err := c.ServiceAnnex.ValidCreate(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	dataId, err := utils.GetDecryptId(annexData.DataId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	uid, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "未登录或账号失效，请重新登录"})
		return
	}

	err = c.ServiceAnnex.Create(uid, annexData.DataType, dataId, annexData.FileList)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", 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"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/file [delete]
func (c *AnnexApi) Delete() {
	// 1.规则验证
	queryId := c.Ctx.URLParam("id")
	if queryId == "" {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "id不能为空"})
		return
	}
	id, err := utils.GetDecryptId(queryId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	err = c.ServiceAnnex.Delete(id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "请求成功",
	})
}
