package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
	"github.com/mhaya/game/game_cluster/nodes/webadmin/service"
)

type Whitelist struct {
}

func NewWhitelist() *Whitelist {
	return &Whitelist{}
}

// GetWhitelist 获取白名单
// @Summary 获取白名单
// @Description 获取白名单
// @Tags 白名单
// @Accept json
// @Produce json
// @Param req body entity.WhitelistListReq true "请求参数"
// @Success 200 {object} []models.Whitelist "返回结果"
// @Router /v1/admin/whitelist/list [post]
func (w *Whitelist) GetWhitelist(ctx *gin.Context) {
	req := &entity.WhitelistListReq{}
	if err := ctx.ShouldBindJSON(req); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	whitelists, err := new(service.Whitelist).GetAll(req)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code":  200,
		"data":  whitelists,
		"msg":   "success",
		"total": req.Count,
	})
}

// AddWhitelist 新增白名单
// @Summary 新增白名单
// @Description 新增白名单
// @Tags 白名单
// @Accept json
// @Produce json
// @Param req body entity.WhitelistAddReq true "请求参数"
// @Success 200 {object} entity.Response "返回结果"
// @Router /v1/admin/whitelist/add [post]
func (w *Whitelist) AddWhitelist(ctx *gin.Context) {
	req := &entity.WhitelistAddReq{}
	if err := ctx.ShouldBindJSON(req); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	err := new(service.Whitelist).Add(req.IP, req.Desc)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
	})
}

// RemoveWhitelist 删除白名单
// @Summary 删除白名单
// @Description 删除白名单
// @Tags 白名单
// @Accept json
// @Produce json
// @Param req body entity.WhitelistRemoveReq true "请求参数"
// @Success 200 {object} entity.Response "返回结果"
// @Router /v1/admin/whitelist/remove [post]
func (w *Whitelist) RemoveWhitelist(ctx *gin.Context) {
	req := &entity.WhitelistRemoveReq{}
	if err := ctx.ShouldBindJSON(req); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	err := new(service.Whitelist).Remove(req.IP)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  err.Error(),
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
	})
}
