package controllers

import (
	"bytes"
	"encoding/json"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol"
)

type BaseController struct {
	beego.Controller
}

func (controller BaseController) JsonUnmarshal(v interface{}) error {
	body := controller.Ctx.Input.RequestBody
	if len(body) == 0 {
		body = []byte("{}")
	}
	newDecoder := json.NewDecoder(bytes.NewReader(body))
	newDecoder.UseNumber()
	err := newDecoder.Decode(v)
	return err
}

func (controller *BaseController) Resp(msg *protocol.ResponseMessage) {
	if msg.Errno != 0 {
		msg.Errno = -1
	}
	controller.Data["json"] = msg
	controller.Ctx.Input.SetData("outputData", msg)
	controller.ServeJSON()
}

func (controller BaseController) GetLimitInfo() (offset int, limit int) {
	offset, _ = controller.GetInt("pageNumber")
	limit, _ = controller.GetInt("pageSize")
	if offset > 0 {
		offset = (offset - 1) * limit
	}
	return
}

//获取请求头信息
func (controller *BaseController) GetRequestHeader(ctx *context.Context) *protocol.RequestHeader {
	h := &protocol.RequestHeader{}

	if v := ctx.Input.GetData("x-mmm-id"); v != nil {
		h.UserId = int64(v.(int))
	}
	if v := ctx.Input.GetData("x-mmm-uname"); v != nil {
		h.UserName = v.(string)
	}

	return h
}