package param

import (
	"strings"

	"tower_api/pkg/errcode"
	"tower_api/service"
)

// ServerCommonParam 区服相关公共参数
type ServerCommonParam struct {
	AppId   string `form:"appid" uri:"appid"`
	OpenId  string `form:"openid" uri:"openid"`
	Version string `form:"ver" uri:"ver"`     //版本号
	Token   string `form:"token" uri:"token"` //额外的token
}

func (s *ServerCommonParam) Validate(serverId int) service.WechatUserChecked {
	//1 基础格式校验
	s.AppId = strings.TrimSpace(s.AppId)
	s.OpenId = strings.TrimSpace(s.OpenId)
	s.Version = strings.TrimSpace(s.Version)
	//2 校验appid和openid是否正确
	return playerService.ValidateOpenIdAndServerId(s.AppId, s.OpenId, s.Version, serverId, s.Token)
}

// AppointedServerParam 设置指定服的参数
type AppointedServerParam struct {
	ServerCommonParam
	ServerId int `form:"server_id" uri:"server_id"`
}

func (a *AppointedServerParam) Validate() service.WechatUserChecked {
	ret := service.WechatUserChecked{}
	if a.ServerId <= 0 {
		ret.Code = errcode.InvalidServerId
		return ret
	}
	return a.ServerCommonParam.Validate(a.ServerId)
}

// ServerListParam 游戏区服分页信息
type ServerListParam struct {
	ServerCommonParam
	ServerZuID int `form:"serverZuID" uri:"serverZuID"`
}

func (s *ServerListParam) Validate() service.WechatUserChecked {
	ret := service.WechatUserChecked{}
	if s.ServerZuID <= 0 {
		ret.Code = errcode.InvalidServerGroupId
		return ret
	}
	ret = s.ServerCommonParam.Validate(0)
	if ret.Code == errcode.SUCCESS && s.ServerZuID != service.RecommendGroup && s.ServerZuID != service.MyRoleGroup {
		maxGroupNum := playerService.GetServerGroupNum(ret.Grayscale, ret.SpecialId)
		if s.ServerZuID > maxGroupNum {
			ret.Code = errcode.InvalidServerGroupId
		}
	}
	return ret
}
