package controllers

import (
	"encoding/json"
	"oppmg/common/log"
	"oppmg/protocol"
	serverank "oppmg/services/rank"
)

type RankController struct {
	BaseController
}

//GetRankType  ..
//@router /rank/list
func (c RankController) GetRankType() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()
	companyid := c.GetCompanyId()
	rspData := serverank.GetRankList(companyid)
	msg = protocol.NewReturnResponse(rspData, nil)
	return
}

//EditRankType ...
//@router /rank/edit
func (c RankController) EditRankType() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()
	type Parameter struct {
		Id   int64  `json:"id"`
		Name string `json:"name"`
	}
	var param Parameter
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
		log.Error("json 解析失败 err:%s", err)
		msg = protocol.BadRequestParam("1")
		return
	}
	companyid := c.GetCompanyId()
	err := serverank.UpdateRankType(param.Id, param.Name, companyid)
	msg = protocol.NewReturnResponse(nil, err)
	return
}

//EditRankType ...
//@router /rank/forbid_allow
func (c RankController) RankTypeForbidAllow() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()
	type Parameter struct {
		Id     int64 `json:"id"`
		status int   `json:"status"`
	}
	var param Parameter
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
		log.Error("json 解析失败 err:%s", err)
		msg = protocol.BadRequestParam("1")
		return
	}
	var err error
	companyid := c.GetCompanyId()
	switch param.status {
	case 1:
		err = serverank.ForbidRank(param.Id, companyid)
	case 2:
		err = serverank.AllowRank(param.Id, companyid)
	}
	msg = protocol.NewReturnResponse(nil, err)
	return
}

//RankSeasonList ...
//@router /rank/season/list
func (c RankController) RankSeasonList() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()

	var param protocol.RequestPageInfo
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
		log.Error("json 解析失败 err:%s", err)
		msg = protocol.BadRequestParam("1")
		return
	}
	companyid := c.GetCompanyId()
	rspData, err := serverank.RankSeasonList(param.PageIndex, param.PageSize, companyid)
	msg = protocol.NewReturnResponse(rspData, err)
	return
}

//RankSeasonAdd ...
//@router /rank/season/add
func (c RankController) RankSeasonAdd() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()
	type Parameter struct {
		Name      string `json:"name"`
		BeginTime string `json:"begin_time"`
		EndTime   string `json:"end_time"`
	}
	var param Parameter
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
		log.Error("json 解析失败 err:%s", err)
		msg = protocol.BadRequestParam("1")
		return
	}
	var (
		beginTime int64
		endTime   int64
	)
	companyid := c.GetCompanyId()
	err := serverank.AddRankSeason(beginTime, endTime, param.Name, companyid)
	msg = protocol.NewReturnResponse(nil, err)
	return
}

//RankSeasonEdit ...
//@router /rank/season/edit
func (c RankController) RankSeasonEdit() {
	var msg *protocol.ResponseMessage
	defer func() {
		c.ResposeJson(msg)
	}()
	type Parameter struct {
		Id        int64  `json:"id"`
		Name      string `json:"name"`
		BeginTime string `json:"begin_time"`
		EndTime   string `json:"end_time"`
	}
	var param Parameter
	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
		log.Error("json 解析失败 err:%s", err)
		msg = protocol.BadRequestParam("1")
		return
	}
	var (
		beginTime int64
		endTime   int64
	)
	companyid := c.GetCompanyId()
	err := serverank.EditRankSeason(param.Id, beginTime, endTime, param.Name, companyid)
	msg = protocol.NewReturnResponse(nil, err)
	return
}