package controller

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

// RCreat
// @Tags 用户关系模块
// @Summary 添加用户间的关系,关系类型有1:好友关系,2:黑名单关系
// @Accept application/json
// @Produce application/json
// @Param json body model.RelationJson true "关系数据"
// @Success 200 {object} response.Response
// @Router /relation/create [post]
func RCreat(c *gin.Context) {
	var relationJson model.RelationJson
	err := c.ShouldBindJSON(&relationJson)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	relation := relationJson.Change()
	fmt.Println(relation)
	err = relation.Creat()
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// GetFriend
// @Tags 用户关系模块
// @Summary 传入用户id获取用户好友列表
// @Produce application/json
// @Param uid query uint true "用户id"
// @Success 200 {object} response.Response
// @Router /relation/friend [get]
func GetFriend(c *gin.Context) {
	var relation model.Relation
	ids := c.Query("uid")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	friends, err := relation.Friend(id)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	response.Success(c.Writer, "success", friends)
}

// GetBadRelation
// @Tags 用户关系模块
// @Summary 传入用户id获取用户黑名单列表
// @Produce application/json
// @Param uid query uint true "用户id"
// @Success 200 {object} response.Response
// @Router /relation/bad [get]
func GetBadRelation(c *gin.Context) {
	var relation model.Relation
	ids := c.Query("uid")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	relations, err := relation.BadRelation(id)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	response.Success(c.Writer, "success", relations)
}

// DRelation
// @Tags 用户关系模块
// @Summary 根据关系id删除关系
// @Produce application/json
// @Param id path uint true "关系id"
// @Success 200 {object} response.Response
// @Router /relation/delete/{id} [delete]
func DRelation(c *gin.Context) {
	var relation model.Relation
	ids := c.Param("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	relation.Id = uint(id)
	err = relation.DRelation()
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

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