package controllers

import (
	"github.com/gin-gonic/gin"
	"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/order"
	"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain"
	"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/protocol"
	"net/http"
	"time"
)

type OrderController struct {
	BaseController
}

//OrderStatistics 订单统计
// @router /statistics [post]
func (this *OrderController) Statistics(c *gin.Context) {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(c, http.StatusOK, msg)
	}()
	var request *protocol.OrderStatisticsRequest
	if err := c.ShouldBind(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	header := this.GetRequestHeader(c)
	msg = protocol.NewReturnResponse(order.Statistics(header, request))
}

//OrderDetail 订单详情
// @router /orderDetail [post]
func (this *OrderController) OrderDetail(c *gin.Context) {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(c, http.StatusOK, msg)
	}()
	var request *protocol.OrderDetailRequest
	if err := c.ShouldBind(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	header := this.GetRequestHeader(c)
	msg = protocol.NewReturnResponse(order.Detail(header, request))
}

//OrderList
func (this *OrderController) OrderList(c *gin.Context) {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(c, http.StatusOK, msg)
	}()
	var request *protocol.OrderListRequest
	if err := c.ShouldBind(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	request.OrderType = domain.OrderReal
	header := this.GetRequestHeader(c)
	msg = protocol.NewReturnResponse(order.List(header, request))
}

//OrderList
func (this *OrderController) Intentions(c *gin.Context) {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(c, http.StatusOK, msg)
	}()
	var request *protocol.OrderListRequest
	if err := c.ShouldBind(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	request.EndTime = time.Now().Unix() * 1000
	request.OrderType = domain.OrderIntention
	header := this.GetRequestHeader(c)
	msg = protocol.NewReturnResponse(order.List(header, request))
}