package main

//
//import (
//	"encoding/json"
//	"errors"
//	"mongo.games.com/game/common"
//	"mongo.games.com/game/model"
//	"mongo.games.com/game/webapi"
//	"mongo.games.com/goserver/core/basic"
//	"mongo.games.com/goserver/core/i18n"
//	"mongo.games.com/goserver/core/logger"
//	"mongo.games.com/goserver/core/task"
//	"mongo.games.com/goserver/core/transact"
//	"time"
//)
//
////比赛相关提供给后台的API
//func init() {
//	//-------------------------------------------------------------------------------------------------------
//	//更新比赛配置
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/UpdateMatchConfig", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			if data, ok := params_data.GetRequestBody("Data"); ok {
//				buf, err := json.Marshal(data)
//				if err != nil {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "params error!"
//					return common.ResponseTag_ParamError, resp
//				}
//
//				var cfg MatchConfig
//				err = json.Unmarshal(buf, &cfg)
//				if err != nil {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "params error!"
//					return common.ResponseTag_ParamError, resp
//				}
//
//				MatchMgrSington.UpdateConfig(&cfg, false)
//				resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//				return common.ResponseTag_Ok, resp
//			}
//
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//			resp[webapi.RESPONSE_ERRMSG] = "need Data!"
//			return common.ResponseTag_ParamError, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//删除比赛配置
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/DeleteMatchConfig", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			platform, _ := params_data.GetStr("Platform")
//			matchId, _ := params_data.GetInt("MatchId")
//
//			m := MatchMgrSington.GetMatch(int32(matchId))
//			if m != nil {
//				if platform != "" && m.dbMatch.Platform != platform {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "limits of authority!"
//					return common.ResponseTag_OpFailed, resp
//				}
//			}
//
//			MatchMgrSington.DeleteMatch(int32(matchId))
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//			return common.ResponseTag_Ok, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//获取当前未开始的比赛
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/QueryNotStartedMatch", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			platform, _ := params_data.GetStr("Platform")
//			data := MatchMgrSington.MarshalAllNotStartedMatch(platform)
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//			resp[webapi.RESPONSE_DATA] = data
//			return common.ResponseTag_Ok, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//强制解散正在进行中的比赛
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/CancelSignupNotStartedMatch", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			platform, _ := params_data.GetStr("Platform")
//			matchId, _ := params_data.GetInt("MatchId")
//
//			m := MatchMgrSington.GetMatch(int32(matchId))
//			if m != nil {
//				if platform != "" && m.dbMatch.Platform != platform {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "limits of authority!"
//					return common.ResponseTag_OpFailed, resp
//				}
//
//				m.ForceCancelSignupAll()
//			}
//
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//			return common.ResponseTag_Ok, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//获取当前正在进行中的比赛
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/QueryRunningMatch", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			platform, _ := params_data.GetStr("Platform")
//			data := MatchMgrSington.MarshalAllRunningMatch(platform)
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//			resp[webapi.RESPONSE_DATA] = data
//			return common.ResponseTag_Ok, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//强制解散正在进行中的比赛
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/DestroyRunningMatch", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			platform, _ := params_data.GetStr("Platform")
//			matchId, _ := params_data.GetInt("MatchCopyId")
//
//			m := MatchMgrSington.GetCopyMatch(int32(matchId))
//			if m != nil {
//				if platform != "" && m.dbMatch.Platform != platform {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "limits of authority!"
//					return common.ResponseTag_OpFailed, resp
//				}
//
//				m.ForceDestroy()
//			}
//
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//			return common.ResponseTag_Ok, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//更新比赛券配置
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/act/UpdateTicketConfig", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			if data, ok := params_data.GetRequestBody("Data"); ok {
//				buf, err := json.Marshal(data)
//				if err != nil {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "params error!"
//					return common.ResponseTag_ParamError, resp
//				}
//
//				var cfg ActTicketConfig
//				err = json.Unmarshal(buf, &cfg)
//				if err != nil {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "params error!"
//					return common.ResponseTag_ParamError, resp
//				}
//
//				ActTicketMgrSington.UpdateConfig(&cfg, false)
//				resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//				return common.ResponseTag_Ok, resp
//			}
//
//			resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//			resp[webapi.RESPONSE_ERRMSG] = "need Data!"
//			return common.ResponseTag_ParamError, resp
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//钱包操作接口
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/Match/AddTicket", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			params_data, _ := params.GetRequestBody("Param")
//			resp := webapi.NewResponseBody()
//
//			member_snid, _ := params_data.GetInt("ID")
//			count, _ := params_data.GetInt64("Ticket")
//			oper, _ := params_data.GetStr("Oper")
//			desc, _ := params_data.GetStr("Desc")
//			billNo, _ := params_data.GetInt("BillNo")
//			platform, _ := params_data.GetStr("Platform")
//
//			if CacheDataMgr.CacheBillCheck(billNo) {
//				resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//				resp[webapi.RESPONSE_ERRMSG] = "Bill number repeated!"
//				resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//				return common.ResponseTag_ParamError, resp
//			}
//			CacheDataMgr.CacheBillNumber(billNo) //防止手抖点两下
//
//			var err error
//			var pd *model.PlayerData
//			oldTicket := int64(0)
//			var timeStamp = time.Now().UnixNano()
//			type PlayerTicketData struct {
//				ID     int32
//				Ticket int64
//			}
//			player := PlayerMgrSington.GetPlayerBySnId(int32(member_snid))
//			if player != nil { //在线玩家处理
//				pd = player.PlayerData
//				if len(platform) > 0 && player.Platform != platform {
//					CacheDataMgr.ClearCacheBill(billNo)
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//					resp[webapi.RESPONSE_ERRMSG] = "player platform forbit!"
//					resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//					return common.ResponseTag_ParamError, resp
//				}
//
//				if count < 0 {
//					if player.Ticket+count < 0 {
//						CacheDataMgr.ClearCacheBill(billNo)
//						resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//						resp[webapi.RESPONSE_ERRMSG] = "ticket not enough!"
//						resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//						return common.ResponseTag_ParamError, resp
//					}
//				}
//
//				gainWay := int32(common.GainWay_API_AddTicket)
//
//				oldTicket = player.Ticket
//				ticketLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), count, gainWay,
//					desc, model.PayCoinLogType_Ticket, 0)
//				timeStamp = ticketLog.TimeStamp
//				//增加日志记录
//				log := model.NewTicketLogEx(int32(member_snid), count, oldTicket+count, player.Ver, gainWay, oper, desc, player.Platform, player.Channel, player.BeUnderAgentCode, player.PackageID, player.InviterId)
//				task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
//					err = model.InsertPayCoinLogs(ticketLog)
//					if err != nil {
//						logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, ticketLog)
//						return err
//					}
//					err = model.InsertTicketLogs(log)
//					if err != nil {
//						//回滚到对账日志
//						model.RemovePayCoinLog(ticketLog.LogId)
//						logger.Logger.Errorf("model.InsertTicketLogs err:%v log:%v", err, ticketLog)
//						return err
//					}
//					return err
//				}), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) {
//					CacheDataMgr.ClearCacheBill(billNo)
//					if data != nil {
//						resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//						resp[webapi.RESPONSE_ERRMSG] = data.(error).Error()
//						resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//					} else {
//						player.Ticket += count
//						player.TicketTotal += count
//						player.SetTicketPayTs(timeStamp)
//						player.dirty = true
//						if player.scene == nil { //如果在大厅,那么同步下数据
//							player.SendDiffData()
//						}
//						pcd := &PlayerTicketData{
//							ID:     int32(member_snid),
//							Ticket: player.Ticket,
//						}
//						resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//						resp[webapi.RESPONSE_ERRMSG] = ""
//						resp[webapi.RESPONSE_DATA] = pcd
//					}
//					dataResp := &common.M2GWebApiResponse{}
//					dataResp.Body, err = resp.Marshal()
//					tNode.TransRep.RetFiels = dataResp
//					tNode.Resume()
//					if err != nil {
//						logger.Logger.Error("AddTicket task marshal data error:", err)
//					}
//				}), "AddTicket").Start()
//				return common.ResponseTag_TransactYield, resp
//			} else {
//				op := OfflinePlayerMgrSington.GetPlayer(int32(member_snid))
//				if op != nil {
//					if count < 0 {
//						if op.Ticket+count < 0 {
//							CacheDataMgr.ClearCacheBill(billNo)
//							resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//							resp[webapi.RESPONSE_ERRMSG] = "ticket not enough!"
//							resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//							return common.ResponseTag_ParamError, resp
//						}
//					}
//				}
//				task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
//					pd = model.GetPlayerDataBySnId(int32(member_snid), true)
//					if pd == nil {
//						return errors.New("Player not find.")
//					}
//					if len(platform) > 0 && pd.Platform != platform {
//						return errors.New("player platform forbit.")
//					}
//					oldTicket = pd.Ticket
//					if count < 0 {
//						if oldTicket+count < 0 {
//							return errors.New("ticket not enough!")
//						}
//					}
//
//					gainWay := int32(common.GainWay_API_AddTicket)
//					ticketLog := model.NewPayCoinLog(int64(billNo), int32(member_snid), count, gainWay,
//						desc, model.PayCoinLogType_Ticket, 0)
//					timeStamp = ticketLog.TimeStamp
//					err = model.InsertPayCoinLogs(ticketLog)
//					if err != nil {
//						logger.Logger.Errorf("model.InsertPayCoinLogs err:%v log:%v", err, ticketLog)
//						return err
//					}
//					//增加帐变记录
//					//增加日志记录
//					log := model.NewTicketLogEx(int32(member_snid), count, oldTicket+count, pd.Ver, gainWay, oper, desc, pd.Platform, pd.Channel, pd.BeUnderAgentCode, pd.PackageID, pd.InviterId)
//					err = model.InsertTicketLogs(log)
//					if err != nil {
//						//回滚到对账日志
//						model.RemovePayCoinLog(ticketLog.LogId)
//						logger.Logger.Errorf("model.InsertTicketLogs err:%v log:%v", err, log)
//						return err
//					}
//					return err
//				}), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) {
//					CacheDataMgr.ClearCacheBill(billNo)
//					if data != nil {
//						resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//						resp[webapi.RESPONSE_ERRMSG] = data.(error).Error()
//						resp[webapi.RESPONSE_DATA] = make(map[string]interface{})
//					} else {
//						pcd := &PlayerTicketData{
//							ID:     int32(member_snid),
//							Ticket: pd.Ticket + count,
//						}
//						resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//						resp[webapi.RESPONSE_ERRMSG] = ""
//						resp[webapi.RESPONSE_DATA] = pcd
//						//更新线下缓存数据
//						op := OfflinePlayerMgrSington.GetPlayer(int32(member_snid))
//						if op != nil {
//							op.Ticket += count
//							op.TicketTotal += count
//							op.SetTicketPayTs(timeStamp)
//						}
//					}
//
//					dataResp := &common.M2GWebApiResponse{}
//					dataResp.Body, err = resp.Marshal()
//					tNode.TransRep.RetFiels = dataResp
//					tNode.Resume()
//					if err != nil {
//						logger.Logger.Error("AddTicket task marshal data error:", err)
//					}
//				}), "AddTicket").Start()
//				return common.ResponseTag_TransactYield, resp
//			}
//		}))
//
//	//-------------------------------------------------------------------------------------------------------
//	//更新比赛券配置
//	WebAPIHandlerMgrSingleton.RegisteWebAPIHandler("/api/act/ManualDistTicket", WebAPIHandlerWrapper(
//		func(tNode *transact.TransNode, params webapi.RequestBody) (int, webapi.ResponseBody) {
//			resp := webapi.NewResponseBody()
//			params_data, _ := params.GetRequestBody("Param")
//			orderId, _ := params_data.GetStr("OrderId")
//			platform, _ := params_data.GetStr("Platform")
//			task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
//				order, err := model.DistAwaitIssuedTicketOrder(orderId, platform)
//				if err != nil {
//					return err
//				}
//				title := i18n.Tr("cn", "ActTicketTitle")
//				content := i18n.Tr("cn", "ActTicketContent", order.SnId, order.MatchName, order.Rank, order.Count)
//				msg := model.NewMessage("", int32(0), order.InviterId, model.MSGTYPE_MATCH_TICKETREWARD, title, content, 0,
//					model.MSGSTATE_UNREAD, time.Now().Unix(), model.MSGATTACHSTATE_DEFAULT, "", nil, order.Platform)
//				msg.Ticket = order.Count
//				err = model.InsertMessage(msg)
//				if err != nil {
//					return err
//				}
//				return msg
//			}), task.CompleteNotifyWrapper(func(data interface{}, t *task.Task) {
//				if data != nil {
//					if msg, ok := data.(*model.Message); ok && msg != nil {
//						p := PlayerMgrSington.GetPlayerBySnId(msg.SnId)
//						if p != nil {
//							p.AddMessage(msg)
//						}
//					}
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_OK
//				} else {
//					resp[webapi.RESPONSE_STATE] = webapi.STATE_ERR
//				}
//				dataResp := &common.M2GWebApiResponse{}
//				dataResp.Body, _ = resp.Marshal()
//				tNode.TransRep.RetFiels = dataResp
//				tNode.Resume()
//			}), "DistAwaitIssuedTicketOrder").Start()
//			return common.ResponseTag_TransactYield, resp
//		}))
//}
