#!/usr/bin/python
# -*- coding: GBK -*-
#
#
##@package PlayerCompensationTube.py
#
# @todo:GM²¹³¥¹ÜÀí µØÍ¼´¦Àí
#
# @author xmnathan
# @date 2010-01-01 10:00
# @version 1.4
# @note:
# @change: "2014-09-29 13:00" xmnathan GM²¹³¥¹ÜÀí
# @change: "2014-11-05 10:50" xmnathan Áìȡʧ°ÜÒ²»Ø°üGameServer£¬ÓÃÓÚÖØÖÃÁìȡ״̬
# @change: "2016-07-25 22:00" hxp Ôö¼ÓÁìÈ¡Óʼþʼþ»ã±¨
# @change: "2017-05-04 12:00" hxp Ôö¼Ó·ûÓ¡ÐéÄâ±³°üÖ§³Ö
#------------------------------------------------------------------------------ 
#"""Version = 2017-05-04 12:00"""
#------------------------------------------------------------------------------ 
import IPY_GameWorld
import GameWorld
import ShareDefine
import ChPyNetSendPack
import NetPackCommon
import ItemCommon
import ItemControler
import ChMapToGamePyPack
import ReadChConfig
import EventReport
import ChConfig
import PlayerControl
import IpyGameDataPY
import EventShell
import time
##A5 3B ÇëÇóÁìÈ¡²¹³¥#tagCMRequestCompensation
#  @param index, clientPack, tick
#  @return None
def OnCMRequestCompensation(index, clientPack, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    if not curPlayer:
        return
    GameWorld.DebugLog("#OnCMRequestCompensation in, PlayerID %s GUID %s"%(curPlayer.GetPlayerID(), clientPack.GUID))
    #±³°üûλÖÃ
    itemPackSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
    #·¢ËÍÏà¹ØÊý¾Ý
    sendPack = ChMapToGamePyPack.tagMGRequestCompensation()
    sendPack.GUID = clientPack.GUID
    sendPack.PlayerID = curPlayer.GetPlayerID()
    sendPack.PackSpaceCount = itemPackSpace
    NetPackCommon.SendPyPackToGameServer(sendPack)
    return
##03 02 Íæ¼ÒÁìÈ¡²¹³¥½á¹û#tagGMRequestCompensationResult
#  @param curPackData, tick
#  @return None
def OnGMRequestCompensationResult(curPackData, tick):
    GameWorld.DebugLog("OnGMRequestCompensationResult in")
    
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
    if not curPlayer:
        #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û
        sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
        sendPack.GUID = curPackData.GUID
        sendPack.PlayerID = curPackData.PlayerID
        sendPack.CompensationType = curPackData.CompensationType
        sendPack.Result = 0
        NetPackCommon.SendPyPackToGameServer(sendPack)
        GameWorld.DebugLog("    PlayerID %s no found "%curPackData.PlayerID)
        return
    
    hasAuctionItem = False
    needPackSpaceDict = {}
    isPackSpaceEnough = True
    # ÏÈ»ã×ÜÎïÆ·ËùÊô±³°ü
    for i in xrange(curPackData.Count):
        curPackItem = curPackData.Items[i]
        itemID = curPackItem.ItemID
        curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
        if not curItemData:
            continue
        
        isAuctionItem = curPackItem.IsBind
        packType = ChConfig.GetItemPackType(curItemData)
        needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count, isAuctionItem)
        needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
        if isAuctionItem:
            hasAuctionItem = True
            
    GameWorld.DebugLog("    hasAuctionItem=%s,needPackSpaceDict=%s" % (hasAuctionItem, needPackSpaceDict))
    for packType, needSpace in needPackSpaceDict.items():
        if needSpace > ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace):
            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType])
            isPackSpaceEnough = False
            break
        
    auctionItemTimeout = False
    auctionItemCreateTime = 0
    # 20201223 Ö÷¸ÉÈ¡ÏûÅÄÆ·ÓÐЧʱ³¤É趨
#    if hasAuctionItem:
#        auctionItemValidTimesMax = IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600 # ÅÄÆ·ÓÐЧʱ³¤
#        auctionItemValidTimesMail = IpyGameDataPY.GetFuncCfg("AuctionItem", 2) * 3600 # ÓʼþÅÄÆ·¸½¼ÓÓÐЧʱ³¤
#        auctionItemValidTimesTotal = auctionItemValidTimesMail + auctionItemValidTimesMax
#        mailCreateTimeStr = curPackData.CreateTime
#        mailCreateTime = GameWorld.ChangeTimeStrToNum(mailCreateTimeStr)
#        curTime = int(time.time())
#        passTime = curTime - mailCreateTime
#        if passTime <= auctionItemValidTimesMail:
#            GameWorld.DebugLog("ÓʼþÅÄÆ·Áìȡʱ¼äÔÚ¸½¼Ó±£»¤Ê±³¤ÄÚ£¬ÅÄÆ·´´½¨Ê±¼ä¼´ÁìÈ¡Óʼþʱ¼ä¿ªÊ¼Ëã!passTime(%s) <= auctionItemValidTimesMail(%s)" % (passTime, auctionItemValidTimesMail))
#            pass
#        elif auctionItemValidTimesMail < passTime < auctionItemValidTimesTotal:
#            auctionItemCreateTime = curTime - (passTime - auctionItemValidTimesMail)
#            GameWorld.DebugLog("ÓʼþÅÄÆ·Áìȡʱ¼ä³¬¹ýÓʼþ±£»¤Ê±¼ä£¬ÅÄÆ·´´½¨Ê±¼äÐè¿Û³ýÁìȡʱµÄÒç³öʱ¼ä!auctionItemValidTimesMail(%s) < passTime(%s) < auctionItemValidTimesTotal(%s), auctionItemCreateTime=%s" 
#                               % (auctionItemValidTimesMail, passTime, auctionItemValidTimesTotal, GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)))
#        elif passTime >= auctionItemValidTimesMax:
#            auctionItemTimeout = True
#            GameWorld.DebugLog("ÓʼþÖеÄÅÄÆ·ÒѹýÆÚ£¬½«×Ô¶¯×ªÎª·ÇÅÄÆ·!passTime(%s) >= auctionItemValidTimesMax(%s)" 
#                               % (passTime, auctionItemValidTimesMax))
            
    #±³°ü¿Õ¼ä²»×ã
    if not isPackSpaceEnough:
        GameWorld.DebugLog("    itemPack no space")
        sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()
        sendMCPack.GUID = curPackData.GUID
        sendMCPack.Result = 0
        NetPackCommon.SendFakePack(curPlayer, sendMCPack)
        #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û
        sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
        sendPack.GUID = curPackData.GUID
        sendPack.PlayerID = curPackData.PlayerID
        sendPack.CompensationType = curPackData.CompensationType
        sendPack.Result = 0
        NetPackCommon.SendPyPackToGameServer(sendPack)
        return
    
    Text = curPackData.Text
    _, _, content = Text.split("<$_$>")
    isPaimaiMail = "PaimaiMail3" in content
    
    for i in xrange(curPackData.Count):
        curPackItem = curPackData.Items[i]
        itemID = curPackItem.ItemID
        isAuctionItem = curPackItem.IsBind and not auctionItemTimeout
        if ItemControler.GetAppointItemRealID(itemID):
            curCreateItem = ItemControler.GetItemByData(ItemControler.GetAppointItemDictData(itemID, isAuctionItem))
        else:
            curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, isAuctionItem)
        if not curCreateItem:
            GameWorld.ErrLog("OnGMRequestCompensationResult CreateSingleItem %s Err "%itemID)
            continue
        
        ##UserData°üº¬ÁË×·¼ÓÊôÐÔ²»ÍêÕû£¬ÕâÀïÐèÒª²¹Æë
        userDataCreateTime = 0
        if curPackItem.UserDataLen: 
            UserDataDict = eval(curPackItem.UserData)
            #ÉèÖÃUserData
            UserData = "%s"%UserDataDict
            curCreateItem.SetUserData(UserData, len(UserData))
            userDataCreateTime = curCreateItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
            
        if isAuctionItem and auctionItemCreateTime and not userDataCreateTime:
            curCreateItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, auctionItemCreateTime)
            
        ItemCommon.MakeEquipGS(curCreateItem)
        
        if isPaimaiMail and ItemCommon.CheckItemIsEquip(curCreateItem):
            EventShell.EventRespons_BuyAuctionEquip(curPlayer, curCreateItem.GetItemColor())
            
        #·ÅÈëÍæ¼Ò±³°ü
        ItemControler.PlayerItemControler(curPlayer).PutInItem(IPY_GameWorld.rptItem, curCreateItem, 
                                                               event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}])
    moneySource = curPackData.MoneySource + ChConfig.Def_GiveMoney_Unknown # ´æÖµÊ±ÎªbyteÀàÐÍ£¬Ê¹ÓÃʱÐ軹ԻØÀ´
    if curPackData.Gold != 0:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, moneySource)
    
    if curPackData.GoldPaper != 0:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, moneySource)
    
    if curPackData.Silver != 0:
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, moneySource)
    
    #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û
    sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
    sendPack.GUID = curPackData.GUID
    sendPack.PlayerID = curPackData.PlayerID
    sendPack.CompensationType = curPackData.CompensationType
    sendPack.Result = 1
    NetPackCommon.SendPyPackToGameServer(sendPack)
    #¸æË߿ͻ§¶Ë²¹³¥ÒÑÁìÈ¡
    sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()
    sendMCPack.GUID = curPackData.GUID
    sendMCPack.Result = 1
    NetPackCommon.SendFakePack(curPlayer, sendMCPack)
    
    #===========================================================================
    # #ÁìÈ¡²¹³¥Ê¼þ¼Ç¼
    # Text = curPackData.Text
    # #%s<$_$>%s
    # sender, title, content = Text.split("<$_$>")
    # #Ä£°å±àºÅ[%s,%s]
    # if "" in content:
    #    mailContentList = content.split("")
    #    mailTemplateNO = GameWorld.ToIntDef(mailContentList[0][14:], None)
    #    EventMailInfo = ReadChConfig.GetEvalChConfig("EventMailInfo")
    #    if mailTemplateNO not in EventMailInfo:
    #        return
    #    title, content = EventMailInfo[mailTemplateNO]
    #    
    #    mailParamStr = mailContentList[1]
    #    mailParamStr = mailParamStr.replace(" ", "")
    #    if mailParamStr.startswith("[") and mailParamStr.endswith("]") and len(mailParamStr) > 2:
    #        content = content % tuple(eval(mailParamStr))
    #    
    # comments = "%s: %s, %s; %s" % (title, curPackData.GUID, eventItemInfo, content)
    # EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_GetMail, comments)
    #===========================================================================
    return