package controller

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

// CreateAppraise
// @Tags 评论模块
// @Summary 创建评论
// @Produce application/json
// @Param json body model.AppraiseJson true "评价信息"
// @Success 200 {object} response.Response
// @Router /appraise/create [post]
func CreateAppraise(c *gin.Context) {
	var appraiseJson model.AppraiseJson
	err := c.ShouldBindJSON(&appraiseJson)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	appraise := appraiseJson.Change()
	fmt.Println(appraise)
	err = appraise.Create()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

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

// RAppraise
// @Tags 评论模块
// @Summary 修改评论
// @Produce application/json
// @Param json body model.Appraise true "评价信息"
// @Success 200 {object} response.Response
// @Router /appraise/revise [post]
func RAppraise(c *gin.Context) {
	var appraise model.Appraise
	err := c.ShouldBindJSON(&appraise)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	err = appraise.Revise()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// GetUserAppraise
// @Tags 评论模块
// @Summary 获取用户评价
// @Produce application/json
// @Param id query uint true "用户id"
// @Success 200 {object} response.Response
// @Router /appraise/user [get]
func GetUserAppraise(c *gin.Context) {
	var appraise model.Appraise
	ids := c.Query("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	appraise.BuyerId = uint(id)
	appraises, err := appraise.GetOwn()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", appraises)
}

// GetAppraisePaged
// @Tags 评论模块
// @Summary 分页获取评论信息
// @Produce application/json
// @Param page path int true "页数"
// @Param pageSize path int true "一页的大小"
// @Success 200 {object} response.Response
// @Router /appraise/{page}/{pageSize} [get]
func GetAppraisePaged(c *gin.Context) {
	var appraise model.Appraise
	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 := appraise.GetPaged(page, pageSize)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	cnt, err := appraise.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)
}