package main

import (
	"mongo.games.com/goserver/core/logger"

	"mongo.games.com/game/common"
	gamehallproto "mongo.games.com/game/protocol/gamehall"
)

type FuncCoinSceneCanEnter func(csp *CoinScenePool, p *Player) gamehallproto.OpResultCode

var coinSceneCanEnterFuncPool = make(map[int]FuncCoinSceneCanEnter)

// RegisterCoinSceneCanEnterFunc 注册游戏入场检测方法
func RegisterCoinSceneCanEnterFunc(gameId int, f FuncCoinSceneCanEnter) {
	coinSceneCanEnterFuncPool[gameId] = f
}

func GetCoinSceneCanEnterFunc(gameId int) FuncCoinSceneCanEnter {
	if f, exist := coinSceneCanEnterFuncPool[gameId]; exist {
		return f
	}
	return nil
}

func init() {
	RegisterCoinSceneCanEnterFunc(common.GameId_ChesstitiansCambodian, chessCanEnterFunc)
	RegisterCoinSceneCanEnterFunc(common.GameId_ChesstitiansCambodianRobot, chessCanEnterFunc)
}

// 象棋入场检查象棋积分
func chessCanEnterFunc(csp *CoinScenePool, p *Player) gamehallproto.OpResultCode {
	chessGradeLimit := csp.dbGameFree.GetChessGradeLimit()
	if len(chessGradeLimit) == 2 {
		if chessGradeLimit[0] > 0 && p.ChessGrade < int64(chessGradeLimit[0]) {
			logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter find snid:%v %v grade limit:%v", p.SnId, p.ChessGrade, chessGradeLimit)
			return gamehallproto.OpResultCode_OPRC_ChessGradeLimit
		}
		if chessGradeLimit[1] > 0 && p.ChessGrade >= int64(chessGradeLimit[1]) {
			logger.Logger.Warnf("(csp *CoinScenePool) PlayerEnter find snid:%v %v grade limit:%v", p.SnId, p.ChessGrade, chessGradeLimit)
			return gamehallproto.OpResultCode_OPRC_ChessGradeLimit
		}
	}
	return gamehallproto.OpResultCode_OPRC_Sucess
}

//todo DB_Createroom 入场检测
