package controller

import (
	"github.com/gin-gonic/gin"
	"strconv"
	"trading-go/model"
	"trading-go/response"
)

// GetAllOrder
// @Tags 订单模块
// @Summary 获取所有订单
// @Produce application/json
// @Success 200 {object} response.Response
// @Router /order [get]
func GetAllOrder(c *gin.Context) {
	var order model.Order
	orders, err := order.GetAll()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", orders)
}

// GetUserOrder
// @Tags 订单模块
// @Summary 获取用户的所有订单
// @Produce application/json
// @Param id query string true "用户id"
// @Success 200 {object} response.Response
// @Router /order/user [get]
func GetUserOrder(c *gin.Context) {
	var order model.Order
	ids := c.Query("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	ownerId := uint(id)
	orders, err := order.GetOwner(ownerId)
	response.Success(c.Writer, "success", orders)
}

// ReviseOrder
// @Tags 订单模块
// @Summary 修改订单的状态
// @Produce application/json
// @Param id formData uint true "订单id"
// @Param state formData int true "订单状态"
// @Success 200 {object} response.Response
// @Router /order/revise [post]
func ReviseOrder(c *gin.Context) {
	var order model.Order
	ids := c.PostForm("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	order.Id = uint(id)
	states := c.PostForm("state")
	state, err := strconv.Atoi(states)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	order.State = state
	err = order.Revise()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// CreateOrder
// @Tags 订单模块
// @Summary 创建订单
// @Produce application/json
// @Param json body model.OrderJson true "订单信息"
// @Success 200 {object} response.Response
// @Router /order/create [post]
func CreateOrder(c *gin.Context) {
	var orderJson model.OrderJson
	err := c.ShouldBindJSON(&orderJson)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	order := orderJson.Change()
	err = order.Create()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// DeleteOrder
// @Tags 订单模块
// @Summary 删除订单
// @Produce application/json
// @Param id path uint true "订单id"
// @Success 200 {object} response.Response
// @Router /order/delete/{id} [delete]
func DeleteOrder(c *gin.Context) {
	var order model.Order
	ids := c.Param("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	order.Id = uint(id)
	err = order.Delete()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// GetOrderPaged
// @Tags 订单模块
// @Summary 分页获取订单
// @Produce application/json
// @Param page path int true "页数"
// @Param pageSize path int true "一页的大小"
// @Success 200 {object} response.Response
// @Router /order/{page}/{pageSize} [get]
func GetOrderPaged(c *gin.Context) {
	var order model.Order
	p := c.Param("page")
	pS := c.Param("pageSize")
	page, err := strconv.Atoi(p)
	pageSize, err := strconv.Atoi(pS)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	rsp, err := order.GetPaged(page, pageSize)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	cnt, err := order.GetCnt()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	if cnt > page*pageSize {
		rsp.HNext = true
	}
	response.Success(c.Writer, "success", rsp)
}