// Package controller 控制层
package controller

import (
	"server/common"
	"server/modules/yx/entity"
	"server/modules/yx/service"
	"strconv"

	"github.com/gin-gonic/gin"
)

type YxUserScoreController struct {
	service *service.YxUserScoreService
}

func NewYxUserScoreController() *YxUserScoreController {
	return &YxUserScoreController{service: service.NewYxUserScoreService()}
}

// RegisterRoutes 注册路由
func (ctrl *YxUserScoreController) RegisterRoutes(rg *gin.RouterGroup) {
	group := rg.Group("/yx-user-scores")
	{
		group.GET("", ctrl.List)
		group.GET("/:id", ctrl.Get)
		group.POST("", ctrl.Create)
		group.PUT("/:id", ctrl.Update)
		group.DELETE("/:id", ctrl.Delete)
	}
}

// List 获取用户分数列表
// @Summary      获取用户分数列表
// @Tags         用户分数
// @Param        page  query  int  false  "页码"  default(1)
// @Param        size  query  int  false  "每页数量"  default(10)
// @Success      200  {object}  common.Response
// @Router       /yx-user-scores [get]
func (ctrl *YxUserScoreController) List(c *gin.Context) {
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	size, _ := strconv.Atoi(c.DefaultQuery("size", "10"))
	items, total, err := ctrl.service.List(page, size)
	if err != nil {
		common.Error(c, 500, err.Error())
		return
	}
	common.Success(c, gin.H{
		"items": items,
		"total": total,
	})
}

// Get 获取单个用户分数
// @Summary      获取单个用户分数
// @Tags         用户分数
// @Param        id    path  string  true  "ID"
// @Success      200  {object}  common.Response
// @Router       /yx-user-scores/{id} [get]
func (ctrl *YxUserScoreController) Get(c *gin.Context) {
	id := c.Param("id")
	item, err := ctrl.service.GetByID(id)
	if err != nil {
		common.Error(c, 404, "未找到记录")
		return
	}
	common.Success(c, item)
}

// Create 创建用户分数
// @Summary      创建用户分数
// @Tags         用户分数
// @Param        item  body  entity.YxUserScore  true  "用户分数信息"
// @Success      200  {object}  common.Response
// @Router       /yx-user-scores [post]
func (ctrl *YxUserScoreController) Create(c *gin.Context) {
	var item entity.YxUserScore
	if err := c.ShouldBindJSON(&item); err != nil {
		common.Error(c, 400, "参数错误")
		return
	}
	if err := ctrl.service.Create(&item); err != nil {
		common.Error(c, 500, err.Error())
		return
	}
	common.Success(c, item)
}

// Update 更新用户分数
// @Summary      更新用户分数
// @Tags         用户分数
// @Param        id    path  string  true  "ID"
// @Param        item  body  entity.YxUserScore  true  "用户分数信息"
// @Success      200  {object}  common.Response
// @Router       /yx-user-scores/{id} [put]
func (ctrl *YxUserScoreController) Update(c *gin.Context) {
	var item entity.YxUserScore
	if err := c.ShouldBindJSON(&item); err != nil {
		common.Error(c, 400, "参数错误")
		return
	}
	item.ID = c.Param("id")
	if err := ctrl.service.Update(&item); err != nil {
		common.Error(c, 500, err.Error())
		return
	}
	common.Success(c, item)
}

// Delete 删除用户分数
// @Summary      删除用户分数
// @Tags         用户分数
// @Param        id    path  string  true  "ID"
// @Success      200  {object}  common.Response
// @Router       /yx-user-scores/{id} [delete]
func (ctrl *YxUserScoreController) Delete(c *gin.Context) {
	id := c.Param("id")
	if err := ctrl.service.Delete(id); err != nil {
		common.Error(c, 500, err.Error())
		return
	}
	common.Success(c, nil)
}
