using Games.GlobeDefine;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using Module.Log;
using GCGame;
using System;
using GCGame.Table;
using Games.Events;

public class RankWindowNew : MonoBehaviour
{
    #region Single

    private static RankWindowNew _instance;
    public static RankWindowNew Instance
    {
        get
        {
            if (_instance != null)
            {
                return _instance;
            }

            LogModule.ErrorLog("Single : Can't get instance.");
            return null;
        }
    }

    #endregion

    public enum RankType_T
    {
        InvalidType = -1, //默认无效排行
        LevelComposite = 0, //等级综合排行
        LevelProf0 = 1, //等级职业0排行
        LevelProf1 = 2, //等级职业1排行
        LevelProf2 = 3, //等级职业2排行
        LevelProf3 = 4, //等级职业3排行

        AbalityComposite = 5, //修为综合排行
        AbalityProf0 = 6, //修为排行职业0
        AbalityProf1 = 7, //修为排行职业1
        AbalityProf2 = 8, //修为排行职业2
        AbalityProf3 = 9, //修为排行职业3

        LingYu = 10, //灵玉排行
        YuanBao = 11, //元宝排行
        YinLiang = 12, //银两排行
        YinPiao = 13, //银票排行

        EquipScoreComposite = 14, //装备评分综合排行
        EquipScoreProf0 = 15, //装备评分排行职业0
        EquipScoreProf1 = 16, //装备评分排行职业1
        EquipScoreProf2 = 17, //装备评分排行职业2
        EquipScoreProf3 = 18, //装备评分排行职业3

        BattlePointComposite = 19, //战斗力综合排行
        BattlePointProf0 = 20, //战斗力排行职业0
        BattlePointProf1 = 21, //战斗力排行职业1
        BattlePointProf2 = 22, //战斗力排行职业2
        BattlePointProf3 = 23, //战斗力排行职业3

        PetScoreComposite = 24, //宠物评分综合排行
        PetScoreProf0 = 25, //宠物评分排行职业0
        PetScoreProf1 = 26, //宠物评分排行职业1
        PetScoreProf2 = 27, //宠物评分排行职业2
        PetScoreProf3 = 28, //宠物评分排行职业3

        GuildPraticeComposite = 29, //帮会修炼综合排行
        GuildPraticeProf0 = 30, //帮会修炼排行职业0
        GuildPraticeProf1 = 31, //帮会修炼排行职业1
        GuildPraticeProf2 = 32, //帮会修炼排行职业2
        GuildPraticeProf3 = 33, //帮会修炼排行职业3

        UserShopMoney = 34, //玩家商店资金排行

        Hot = 35, //人气排行
        Flower = 36, //鲜花排行
        GiveFlower = 37, //排行

        HotWeek = 38, //人气周排行
        FlowerWeek = 39, //鲜花周排行
        GiveFlowerWeek = 40, //周排行


        GuildFinishTimes = 41, //帮会出师次数排行

        Constitu = 42, //根骨排行
        Morfib = 43, //精力排行
        Strength = 44, //力量排行
        Intelleng = 45, //智力排行
        Agile = 46, //敏捷排行
        LuckyVal = 47, //幸运值排行

        MaxHp = 48, //最大气血排行
        MaxMp = 49, //最大法力排行
        PysAttack = 50, //物理攻击排行
        MagAttack = 51, //法术攻击排行
        PysDef = 52, //物理防御排行
        MagDef = 53, //法术防御排行

        GuildMoney = 54, //帮会财富排行
        GuildActive = 55, //帮会活跃度排行
        GuildScope = 56, //帮会规模排行
        GuildEquipScore = 57, //帮会装备评分排行

        GuildUnionGame0 = 58, //帮会甲级联赛排行
        GuildUnionGame1 = 59, //帮会乙级联赛排行
        GuildUnionGame2 = 60, //帮会丙级联赛排行
        GuildUnionGame3 = 61, //帮会丁级联赛排行
        GuildUnionGame4 = 62, //帮会戊级联赛排行
        GuildUnionGame5 = 63, //帮会己级联赛排行
        GuildUnionGame6 = 64, //帮会庚级联赛排行
        GuildUnionGame7 = 65, //帮会辛级联赛排行
        GuildUnionGame8 = 66, //帮会壬级联赛排行
        GuildUnionGame9 = 67, //帮会癸级联赛排行

        GuildPoem = 68, //行酒令对诗排行
        GuildRobberCostTime = 69, //帮会大盗排行

        WeiboHot = 70, //微博热点排行<模板>

        Advance_0 = 71, //进阶排行榜0
        Advance_1 = 72, //进阶排行榜1
        Advance_2 = 73, //进阶排行榜2
        Advance_3 = 74, //进阶排行榜3
        Advance_4 = 75, //进阶排行榜4
        Advance_5 = 76, //进阶排行榜5
        Advance_6 = 77, //进阶排行榜6

        DailyRecharge = 78, // 每日充值排行榜
        DailyConsume = 79, // 每日消费排行榜

        CopyDefend_0 = 80,//守护岳飞副本难度0
        CopyDefend_1 = 81,//守护岳飞副本难度1
        CopyDefend_2 = 82,//守护岳飞副本难度2
        CopyDefend_3 = 83,//守护岳飞副本难度3

        CopyClimb_0 = 84,//爬塔副本副本难度0

        CopyClimb_Buff_0 = 85, // 爬塔Buff副本难度
        CopyClimb_Buff_1 = 86, // 爬塔Buff副本难度
        CopyClimb_Buff_2 = 87, // 爬塔Buff副本难度
        CopyClimb_Buff_3 = 88, // 爬塔Buff副本难度

        CopyShadow_0 = 89, // 影子战场
        CopyRealm_0 = 90,   // 诸界爬塔副本

        GemCombat = 102, //灵玉排行职业0
        StrengthCombat = 103, //灵玉排行职业1
        SkillCombat = 104, //灵玉排行职业2
        

        RankMax,
    }

    public enum RankPropID
    {
        InvalidID = -1, //无效ID
        UserGuid = 0, //玩家Guid

        UserProf = 1, //玩家职业
        UserName = 2, //玩家名
        GuildName = 3, //帮会名
        MasterName = 4, //师门名
        LoverName = 5, //配偶名
        HomelandName = 6, //家园名
        PetName = 7, //宠物名

        UserLevel = 8, //玩家等级
        UserAbalityLevel = 9, //玩家修为

        UserLingYu = 10, //灵玉
        UserYuanBao = 11, //元宝
        UserYinliang = 12, //银两
        UserYinPiao = 13, //银票

        UserEquipScore = 14, //玩家装备评分
        UserBattlePoint = 15, //玩家战斗力
        UserPetScore = 16, //玩家宠物评分
        UserGuildPratice = 17, //玩家帮派修炼
        UserShopMoney = 18, //玩家商店资金
        UserGuildFinishTimes = 19, //玩家出师次数
        UserHot = 20, //人气
        UserFlower = 21, //鲜花
        UserGiveFlower = 22, //送鲜花
        UserHotWeek = 23, //周人气
        UserFlowerWeek = 24, //周鲜花
        UserGiveFlowerWeek = 25, //周送鲜花

        UserConstitu = 26, //根骨
        UserMorfib = 27, //精力
        UserStrength = 28, //力量
        UserIntelleng = 29, //智力
        UserAgile = 30, //敏捷
        UserLuckyVal = 31, //幸运值

        UserMaxHp = 32, //最大气血
        UserMaxMp = 33, //最大法力
        UserPysAttack = 34, //物理攻击
        UserMagAttack = 35, //法术攻击
        UserPysDef = 36, //物理防御
        UserMagDef = 37, //法术防御

        GuildGuid = 38, //帮会Guid
        GuildMemberCount = 39, //帮会成员数目
        GuildScope = 40, //帮会规模
        GuildMoney = 41, //帮会资金
        GuildActiveVal = 42, //帮会活跃度
        GuildEquipScore = 43, //帮会装备评分
        GuildUnionGameRank = 44, //帮会联赛排名
        GuildPoem = 45, //帮会行酒令对诗
        GuildRobberCostTime = 46, //帮会大盗耗时

        RecordTime = 47, // 本条记录产生时间
        UserShopName = 48, //玩家商店名

        UserRankIndex = 49, //玩家在榜单中的排名0~N
        GuildCreateTime = 50, //帮会建立时间

        WeiboRecordGuid = 51, //微博guid
        WeiboLikedCount = 52, //微博点赞次数

        GuildPoemCostTime = 53, //帮会行酒令对诗总耗时

        UserAdvanceGrade = 54, //玩家的进阶阶级
        UserAdvanceStar = 55, //玩家的进阶星数

        TestingCopyPassedLevel = 56, //试炼副本通过波数
        //家园暂时不搞

        // 消费/充值榜新增
        DailyRecharge = 57,     // 每日充值金额
        DailyConsume = 58,      // 每日消费金额
        RealRank = 59,          // 真实排名
        HeadPicName = 60,       // 梦岛头像
        //-----------------

        AdvanceCombatValue = 61,       // 进阶战斗力

        RedPacketNum = 62, //红包数

        Wing = 63, //翅膀id
        FashionId = 64, //时装id
        WeaponId = 65, //武器id

        FellowId = 66, //宠物dataid

        EffectId = 67, //装备特效id
        AuraWingId = 68, //翅膀特效id

        EnhanceTotalLV = 69, //强化总登记
        EnhancePerfect = 70, //强化完美度
        GemCombat = 71, //宝石战力

        SkillCombat = 72, //技能战力

        PropMax,
    }


    private Dictionary<int, string> types = new Dictionary<int, string>();

    public GameObject RankMain;  //左侧一级按钮
    public GameObject RankSub;  //左侧二级按钮
    public GameObject RankSubRight; //右侧顶部排行分类
    public GameObject RankInfoItem;  //排名具体信息每条的记录
    public ToggleGroup contentGroup;

    public Text headItemText1;
    public Text headItemText2;
    public Text headItemText3;
    public Text headItemText4;

    public GameObject SelfRankInfoObj;
    public TogglesControl toggleControl;

    public NewRankRoot _newRankRootPanel;
    public GameObject _OldPanel;
    public GameObject _NewPanel;

    int currentSelctRankMainType = -1;
    int currentSelectRankSubType = -1;
    int currentSelectRankSubSubType = -1;
    Dictionary<int, List<GameObject>> subRankItems = new Dictionary<int, List<GameObject>>();
    Dictionary<int, GameObject> menuRankItem = new Dictionary<int, GameObject>();

    private bool hasInit = false;

    void Awake()
    {
        Hashtable calbackparam = new Hashtable();
        calbackparam["name"] = "RankInfoList";
        MessageEventCallBack fun = OnNewRankInfo;
        calbackparam.Add("callFun", fun);
        Games.Events.EventDispatcher.Instance.AddMessageEvent(Games.Events.EventId.RankInfoList, calbackparam);
        if(_instance == null)
        {
            _instance = this;
            hasInit = false;
        }

        toggleControl.OnTogglesSelect += OnRankMainSelect;
    }

    private void OnEnable()
    {
        toggleControl.SetToggleOn(0);
        //OnRankMainSelect(0);
    }

    private int _CurSelectPageIndex = -1;
    public void OnRankMainSelect(int index)
    {
        _CurSelectPageIndex = index;
        if (index == 0 || index == 1)
        {
            _OldPanel.SetActive(false);
            _NewPanel.SetActive(true);
            _newRankRootPanel.ShowPanel(index);

        }else
        {
            _OldPanel.SetActive(true);
            _NewPanel.SetActive(false);
        }

        OnSelectMain(index);
    }

    void OnDestroy()
    {
        Games.Events.EventDispatcher.Instance.RemoveMessage(Games.Events.EventId.RankInfoList, "RankInfoList");
        hasInit = false;
        _instance = null;
    }

    void Start()
    {
        Init();
    }

    private void Init()
    {
        if (hasInit == false)
        {
            var rankTypeInfos = TableManager.GetRankInfoType().Values;
            foreach (var typeInfo in rankTypeInfos)
            {
                types[typeInfo.Id] = typeInfo.ProStr;
            }
            var rankinfos = TableManager.GetRankProInfo().Values;
            int index = 0;
            currentSelctRankMainType = 0;
            int indexChild = 0;
            foreach (var type in types)
            {
                foreach (var rankInfo in rankinfos)
                {
                    if (rankInfo.Type == type.Key)
                    {
                        CloneRankChild(rankInfo, indexChild);   //排行榜左侧二级按钮
                        indexChild++;
                    }
                }
                index++;
            }

            // 默认开启第一个选项
            toggleControl.SetToggleOn(0);
            hasInit = true;
        }
    }

    public void OnSelectMain(int type)
    {
        if (subRankItems.ContainsKey(type) == false)
        {
            if(type == -1)
            {
                currentSelctRankMainType = -1;
            }
            return;
        }

        if (subRankItems.ContainsKey(currentSelctRankMainType))
        {
            for (int i = 0; i < subRankItems[currentSelctRankMainType].Count; i++)
            {
                subRankItems[currentSelctRankMainType][i].SetActive(false);
            }
        }
        currentSelctRankMainType = type;
        for (int i = 0; i < subRankItems[currentSelctRankMainType].Count; i++)
        {
            subRankItems[currentSelctRankMainType][i].SetActive(true);
            Transform checkMark = subRankItems[currentSelctRankMainType][i].transform.Find("Checkmark");
            if(checkMark!=null)
            {
                if (i == 0)
                {
                    subChildCheckmark = checkMark.gameObject;
                    checkMark.gameObject.SetActive(true);
                    Button btn = subRankItems[currentSelctRankMainType][i].GetComponent<Button>();
                    if(btn!=null)
                    {
                        btn.onClick.Invoke();
                    }
                }
                else
                    checkMark.gameObject.SetActive(false);
            }
                
        }
    }

    void CloneRankChild( Tab_RankProInfo rankInfo,int index)
    {
        if (RankSub == null)
            return;
        GameObject newMain = GameObject.Instantiate(RankSub);
        if (newMain == null)
            return;
        newMain.transform.SetParent(RankSub.transform.parent);
        newMain.transform.localPosition = RankSub.transform.localPosition;
        newMain.transform.localScale = RankSub.transform.localScale;
        newMain.SetActive(true);

        if (subRankItems.ContainsKey(rankInfo.Type) == false)
            subRankItems[rankInfo.Type] = new List<GameObject>();
        subRankItems[rankInfo.Type].Add(newMain);

        Text[] btnNames = newMain.GetComponentsInChildren<Text>();
        for (int i = 0; i < btnNames.Length; i++)
        {
            btnNames[i].text = rankInfo.ProStr;
        }
        if(rankInfo.Type == currentSelctRankMainType)
        {
            newMain.SetActive(true);
            Transform checkMark = newMain.transform.Find("Checkmark");
            if (checkMark != null)
            {
                if (index == 0)
                {
                    currentSelectRankSubType = rankInfo.SubType;
                    checkMark.gameObject.SetActive(true);
                }
                else
                    checkMark.gameObject.SetActive(false);
            }
        }
        else
        {
            newMain.SetActive(false);
        }
        Button btn = newMain.GetComponent<Button>();
        if (btn != null)
        {
            btn.onClick.AddListener(delegate ()
            {
                OnSelectSubChild(btn.gameObject, rankInfo.SubType);
            });
        }

        if(index == 0)
        {
            OnSelectSubChild(btn.gameObject, rankInfo.SubType);
        }
    }

    GameObject subChildCheckmark = null;
    public void OnSelectSubChild(GameObject subChildBtn,int subType)
    {
        if (subChildBtn == null)
            return;
        Transform checkMark = subChildBtn.transform.Find("Checkmark");
        if (checkMark == null)
            return;
        if (subChildCheckmark != null)
            subChildCheckmark.SetActive(false);
        subChildCheckmark = checkMark.gameObject;
        subChildCheckmark.SetActive(true);

        var ranks = TableManager.GetRankInfo().Values;
        for(int i=0;i< rightTopItems.Count;i++)
        {
            rightTopItems[i].SetActive(false);
            Destroy(rightTopItems[i]);
        }
        rightTopItems.Clear();
        RightTopCheckMark = null;
        currentSelectRankSubType = subType;
        foreach (var rank in ranks)
        {
            if(rank.Type == currentSelctRankMainType && rank.SubType == subType)
            {
                CloneRightTopChild(rank);
            }
        }

    }

    List<GameObject> rightTopItems = new List<GameObject>();

    void CloneRightTopChild(Tab_RankInfo rank)
    {
        if (RankSubRight == null)
            return;
        GameObject newObj = GameObject.Instantiate(RankSubRight);
        if (newObj == null)
            return;
        newObj.transform.SetParent(RankSubRight.transform.parent);
        newObj.transform.localPosition = RankSubRight.transform.localPosition;
        newObj.transform.localScale = RankSubRight.transform.localScale;
        newObj.SetActive(true);
        rightTopItems.Add(newObj);
        Text[] btnNames = newObj.GetComponentsInChildren<Text>();
        for (int i = 0; i < btnNames.Length; i++)
        {
            btnNames[i].text = rank.SubSubTypeName;
        }
        Transform checkMark = newObj.transform.Find("Checkmark");
        if (checkMark != null)
        {
            checkMark.gameObject.SetActive(false);
        }
        Button btn = newObj.GetComponent<Button>();
        if (btn != null)
        {
            btn.onClick.AddListener(delegate ()
            {
                OnSelectRightTopItem(btn.gameObject,rank);
            });
        }
        if(rightTopItems.Count ==1)
        {
            OnSelectRightTopItem(btn.gameObject, rank);
        }
    }

    GameObject RightTopCheckMark;
    public void OnSelectRightTopItem(GameObject RightTopItemBtn, Tab_RankInfo rank)
    {
        if (RightTopCheckMark != null)
            RightTopCheckMark.SetActive(false);

        if (RightTopItemBtn == null)
            return;
        Transform checkMark = RightTopItemBtn.transform.Find("Checkmark");
        if (checkMark == null)
            return;
        if (RightTopCheckMark != null)
            RightTopCheckMark.SetActive(false);
        RightTopCheckMark = checkMark.gameObject;
        RightTopCheckMark.SetActive(true);

        headItemText1.text = "";
        headItemText2.text = "";
        headItemText3.text = "";
        headItemText4.text = "";

        Tab_RankProStr proStr1 = TableManager.GetRankProStrByID(rank.GetInfoIDbyIndex(0),0);
        if(proStr1!=null)
        {
            headItemText1.text = proStr1.ProStr;
        }
        Tab_RankProStr proStr2 = TableManager.GetRankProStrByID(rank.GetInfoIDbyIndex(1), 0);
        if (proStr2 != null)
        {
            headItemText2.text = proStr2.ProStr;
        }
        Tab_RankProStr proStr3 = TableManager.GetRankProStrByID(rank.GetInfoIDbyIndex(2), 0);
        if (proStr3 != null)
        {
            headItemText3.text = proStr3.ProStr;
        }
        Tab_RankProStr proStr4 = TableManager.GetRankProStrByID(rank.GetInfoIDbyIndex(3), 0);
        if (proStr4 != null)
        {
            headItemText4.text = proStr4.ProStr;
        }
        currentSelectRankSubSubType = rank.SubSubType;
        //请求排行榜信息
        if (_CurSelectPageIndex == 2)
        {
            CG_REQ_RANK_LIST send = (CG_REQ_RANK_LIST)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_RANK_LIST);
            send.Ranktype = rank.Id;
            send.SendPacket();
        }
    }

    List<GameObject> rankInfoItems = new List<GameObject>();
    GameObject curSelectInfo;
    public void CloneRankInfoItem(int rank,int rankinfoID,RankElemStruct rankInfo)
    {
        Tab_RankInfo rankTabInfo = TableManager.GetRankInfoByID(rankinfoID, 0);
        if (rankTabInfo == null)
            return;
        if (rankTabInfo.Type != currentSelctRankMainType)
            return;
        if (rankTabInfo.SubType != currentSelectRankSubType)
            return;
        if (rankTabInfo.SubSubType != currentSelectRankSubSubType)
            return;
        GameObject newObj = GameObject.Instantiate(RankInfoItem);
        if (newObj == null)
            return;
        newObj.transform.SetParent(RankInfoItem.transform.parent);
        newObj.transform.localPosition = RankInfoItem.transform.localPosition;
        newObj.transform.localScale = RankInfoItem.transform.localScale;
        newObj.SetActive(true);
        rankInfoItems.Add(newObj);

        SetRanInfo(rank, newObj, rankTabInfo, rankInfo);

        long PlayerGuid = GetProValueInt((int)RankPropID.UserGuid, rankInfo);   //玩家GUID 属性ID是 0
        long GuildGuid = GetProValueInt((int)RankPropID.GuildGuid, rankInfo);   //帮会guid 属性ID是38
        string PlayerName = GetProValueStr((int)RankPropID.UserName, rankInfo); //玩家名称
        long PlayerLevel = GetProValueInt((int)RankPropID.UserLevel, rankInfo); //玩家等级
        long PlayerPro = GetProValueInt((int)RankPropID.UserProf, rankInfo);    //玩家职业
        long PlayerXiuwei = GetProValueInt((int)RankPropID.UserAbalityLevel, rankInfo);  //玩家修为
        GameObject select = newObj.transform.Find("select").gameObject;
        if (select != null)
            select.SetActive(false);
        Button btn = newObj.GetComponent<Button>();
        if(btn!=null)
        {
            btn.onClick.AddListener(delegate ()
            {
                if(PlayerGuid!=-1)
                    PlayerTooltipsLogic.ShowPlayerTooltip((ulong)PlayerGuid, PlayerName,Utils.GetProfessionSpriteName((int)PlayerPro), (int)PlayerLevel,-1, (int)PlayerXiuwei, Vector3.zero);
                if(GuildGuid!=-1)
                {
                    PopMenuLogic.ShowMenu("RankAddGuild", newObj, (ulong)GuildGuid, PlayerName);
                }

                if(curSelectInfo != null)
                {
                    curSelectInfo.SetActive(false);
                }
               
                curSelectInfo = select;
                curSelectInfo.SetActive(true);
            });
        }
    }

    void SetRanInfo(int rank,GameObject ParentObj, Tab_RankInfo rankTabInfo, RankElemStruct rankInfo)
    {
        if (rankTabInfo == null)
            return;
        Text[] childTexts = ParentObj.GetComponentsInChildren<Text>();
        for (int i = 0; i < childTexts.Length; i++)
        {
            childTexts[i].text = "";
            if (childTexts[i].name == "rank")
            {
                if (rank <= 0)
                    childTexts[i].text = StrDictionary.GetClientDictionaryString("#{2049}");
                else
                    childTexts[i].text = rank.ToString();
                Transform First = ParentObj.transform.Find("First");
                Transform Second = ParentObj.transform.Find("Second");
                Transform Three = ParentObj.transform.Find("Three");
                if(First!=null)
                {
                    First.gameObject.SetActive(rank == 1);
                }
                if (Second != null)
                {
                    Second.gameObject.SetActive(rank == 2);
                }
                if (Three != null)
                {
                    Three.gameObject.SetActive(rank == 3);
                }

            }
            if (childTexts[i].name == "info0")
            {
                SetRankInfoText(childTexts[i], rankTabInfo.GetInfoIDbyIndex(0), rankInfo);
            }
            if (childTexts[i].name == "info1")
            {
                SetRankInfoText(childTexts[i], rankTabInfo.GetInfoIDbyIndex(1), rankInfo);
            }
            if (childTexts[i].name == "info2")
            {
                SetRankInfoText(childTexts[i], rankTabInfo.GetInfoIDbyIndex(2), rankInfo);
            }
            if (childTexts[i].name == "info3")
            {
                SetRankInfoText(childTexts[i], rankTabInfo.GetInfoIDbyIndex(3), rankInfo);
            }
        }
    }

    //自己的排名信息
    void SetSelfRankInfo(RankElemStruct selfRank, int rankinfoID)
    {
        Tab_RankInfo rankTabInfo = TableManager.GetRankInfoByID(rankinfoID, 0);
        if (rankTabInfo == null)
            return;
        int rank = (int)GetProValueInt((int)RankPropID.UserRankIndex, selfRank);
        SetRanInfo(rank+1, SelfRankInfoObj, rankTabInfo,selfRank);
    }

    void SetRankInfoText(Text rankInfoText,int proID, RankElemStruct rankInfo)
    {
        if (proID == -1)
            return;
        long proValue = GetProValueInt(proID, rankInfo);
        if (proValue != -1)
        {
            //职业特殊处理
            if(proID == (int)RankPropID.UserProf)
            {
                rankInfoText.text = Utils.GetProfession((int)proValue);
            }
            else if(proID == (int)RankPropID.GuildEquipScore)
            {
                rankInfoText.text = (proValue > 0 ? StrDictionary.GetClientDictionaryString("#{2972}", proValue) : "0");
            }
            else
                rankInfoText.text = proValue.ToString();
            return;
        }
        string proValues = GetProValueStr(proID, rankInfo);
        if(proValues != "")
        {
            rankInfoText.text = proValues;
        }
    }

   public long GetProValueInt(int proID, RankElemStruct ranklist)
    {
        if (ranklist == null)
            return -1;
        for(int i=0;i< ranklist.numberfieldsCount;i++)
        {
            RankFieldNumberStruct numberInfo = ranklist.GetNumberfields(i);
            if (proID == numberInfo.Propid)
                return numberInfo.Propvalue;
        }
        return -1;
    }

    public string GetProValueStr(int proID, RankElemStruct ranklist)
    {
        if (ranklist == null)
            return "";
        for (int i = 0; i < ranklist.stringfieldsCount; i++)
        {
            RankFieldStringStruct stringInfo = ranklist.GetStringfields(i);
            if (proID == stringInfo.Propid)
                return stringInfo.Propvalue;
        }
        return "";
    }

    public void OnNewRankInfo(Hashtable addParam,Hashtable sendParam)
    {
        if (sendParam.ContainsKey("data") == false)
            return;
        GC_RET_RANK_LIST packet = (GC_RET_RANK_LIST)sendParam["data"];
        if (packet == null)
            return;
        for(int i=0;i<rankInfoItems.Count;i++)
        {
            rankInfoItems[i].SetActive(false);
            GameObject.Destroy(rankInfoItems[i]);
        }
        rankInfoItems.Clear();
        for (int i=0;i<packet.ranklistCount;i++)
        {
            if (i >= 100)
                break;
            CloneRankInfoItem(i + 1, packet.Ranktype,packet.ranklistList[i]);
        }

        SetSelfRankInfo(packet.Myrankinfo, packet.Ranktype);
    }

    public static void ShowPage(RankType_T type)
    {
        var rankInfoTab = TableManager.GetRankInfoByID((int)type, 0);
        if (rankInfoTab == null)
            return;
        UIManager.ShowUI(UIInfo.RankRoot, delegate(bool bSucess, object param) {
            if(bSucess)
            {
                if (rankInfoTab.Type == 0 || rankInfoTab.Type == 1)
                    NewRankRoot.Instance.isShowType = (int)type;
                RankWindowNew.Instance.PositionRankItem((int)type);
            }
        });
    }

    public void PositionRankItem(int type)
    {
        var rankTab = TableManager.GetRankInfoByID(type, 0);
        if (rankTab == null)
        {
            LogModule.ErrorLog("Can't find type inf rankInfo : " + type);
            return;
        }

        if (rankTab.Type == 2)
        {
            SetShowPage(rankTab);
            return;
        }
        else
        {
            toggleControl.SetToggleOn(rankTab.Type);
            if (NewRankRoot.Instance)
                NewRankRoot.Instance.ShowMenuItem(type);
        }
    }



    // 对外接口:设置需要显示的具体页面
    public void SetShowPage(Tab_RankInfo rank)
    {
        if(rank != null)
        {
            Init();

            toggleControl.SetToggleOn(rank.Type);
            var subDic = TableManager.GetRankProInfo().Values;
            int subIndex = -1;
            foreach(var item in subDic)
            {
                if(item.Type == rank.Type)
                {
                    ++subIndex;
                    if(item.SubType == rank.SubType)
                    {
                        break;
                    }
                }
            }

            if(subIndex != -1)
            {
                GameObject subMenuItem = subRankItems[rank.Type][subIndex];
                OnSelectSubChild(subMenuItem, rank.SubType);

                var subSubDic = TableManager.GetRankInfo().Values;
                int subSubIndex = -1;
                foreach (var item in subSubDic)
                {
                    if(item.Type == rank.Type && item.SubType == rank.SubType)
                    {
                        ++subSubIndex;
                        if(item.SubSubType == rank.SubSubType)
                        {
                            break;
                        }
                    }
                }

                if(subSubIndex != -1)
                {
                    // 注意 : rightTopItems中的索引是从 1 开始的。
                    OnSelectRightTopItem(rightTopItems[subSubIndex], rank);
                }
            }
        }
    }

    public void Close()
    {
        UIManager.CloseUI(UIInfo.RankRoot);
    }

}