using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using GCGame.Table;
using Games.Item;
using Games.LogicObj;
using Module.Log;

public class AdvanceFashionPanelCtr : MonoBehaviour {

    public void InitMenuItemName()
    {
        switch (AdvanceMountPanelCtr.Instance.m_AdvanceType)
        {
            case AdvanceBase.AdvanceType.Ride:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42667}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42667}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42667}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42667}");
                break;
            case AdvanceBase.AdvanceType.Wing:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42669}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42669}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42669}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42669}");
                break;
            case AdvanceBase.AdvanceType.Piano:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42668}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42668}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42668}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42668}");
                break;
            case AdvanceBase.AdvanceType.Qilinbi:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42670}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42670}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42670}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42670}");
                break;
            case AdvanceBase.AdvanceType.Soul:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42709}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42709}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42709}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42709}");
                break;
            case AdvanceBase.AdvanceType.Mask:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42710}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42710}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42710}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42710}");
                break;
            case AdvanceBase.AdvanceType.Huopao:
                menuItemName[0].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42711}");
                menuItemName[1].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42711}");
                menuItemName[2].text = StrDictionary.GetClientDictionaryString("#{43010}") + StrDictionary.GetClientDictionaryString("#{42711}");
                menuItemName[3].text = StrDictionary.GetClientDictionaryString("#{43012}") + StrDictionary.GetClientDictionaryString("#{42711}");
                break;
        }
    }

    public static AdvanceFashionPanelCtr Instance;
    private void Awake()
    {
        Instance = this;
    }

    private void OnDestroy()
    {
        Instance = null;
    }

    private void OnEnable()
    {
        InitMenuItemName();
        IsCanDragCameraTeture();
        StartCoroutine(GetAllTypeIdList());
    }

    public void IsCanDragCameraTeture()
    {
        cameraTexture._CanDrag = AdvanceMountPanelCtr.Instance.m_AdvanceType  == AdvanceBase.AdvanceType.Ride || AdvanceMountPanelCtr.Instance.m_AdvanceType == AdvanceBase.AdvanceType.Wing;
    }

    public int isShowIndex = -1;
    public void ShowDefaultFirst()
    {
        if (isShowIndex == -1)
        {
            OnToggleClick(0);

        }else
        {
            OnToggleClick(isShowIndex);
        }
        isShowIndex = -1;
    }

    public void ReqAdvancdFashionInfo()
    {
        CG_REQ_ADVANCE req = (CG_REQ_ADVANCE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ADVANCE);
        req.SetType((int)AdvanceMountPanelCtr.Instance.m_AdvanceType);
        req.SetOptionType((int)AdvanceBase.ReqType.REQ_INFO);
        req.SetParam1(1);
        req.SetParam2(0);
        req.SendPacket();
    }

    private List<GameObject> advanceItemPrefabList = new List<GameObject>();
    private List<GameObject> fashionItemPrefabList = new List<GameObject>();
    private void CreateItemPrefab()
    {
        //当前帧只初始化一个
        if (curTypeGradeBaseIdList.Count > 0)
        {
            GameObject item = GameObject.Instantiate(itemprefab);
            item.transform.SetParent(prefabParent);
            item.transform.localPosition = Vector3.zero;
            item.transform.localScale = Vector3.one;
            item.transform.localRotation = Quaternion.Euler(Vector3.zero);
            advanceItemPrefabList.Add(item);
            advanceItemPrefabList[0].GetComponent<AdvanceFashionItem>().InitItem(curTypeGradeBaseIdList[0], (int)AdvanceFashionType.Advance, 0);
        }
        if (curTypeGradeBaseIdList.Count > 1)
        {
            StartCoroutine(CreateItemCoroutine());
        }
    }

    IEnumerator CreateItemCoroutine()
    {
        yield return new WaitForEndOfFrame();
        for (int index = 1; index < curTypeGradeBaseIdList.Count; index++)
        {
            GameObject item = GameObject.Instantiate(itemprefab);
            item.transform.SetParent(prefabParent);
            item.transform.localPosition = Vector3.zero;
            item.transform.localScale = Vector3.one;
            item.transform.localRotation = Quaternion.Euler(Vector3.zero);

            advanceItemPrefabList.Add(item);
            advanceItemPrefabList[index].GetComponent<AdvanceFashionItem>().InitItem(curTypeGradeBaseIdList[index], (int)AdvanceFashionType.Advance, index);
        }

        for (int index = 0; index < curTypeFashionIdList.Count; index++)
        {
            GameObject item = GameObject.Instantiate(itemprefab);
            item.transform.SetParent(prefabParent);
            item.transform.localPosition = Vector3.zero;
            item.transform.localScale = Vector3.one;
            item.transform.localRotation = Quaternion.Euler(Vector3.zero);

            fashionItemPrefabList.Add(item);
            fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().InitItem(curTypeFashionIdList[index], (int)AdvanceFashionType.Fashion, index);
        }

        RefreshAdvanceItemState();
        ShowDefaultFirst();
        yield break;
    }

    #region
    public GameObject itemprefab;
    public Transform prefabParent;

    public List<Image> menuItemMarkIconList;
    public List<Text> menuItemName;

    public Text gradeText;
    public Text modelName;
    public UICameraTexture cameraTexture;

    public GameObject namePanel; 
    public GameObject attrPanel;
    public Text _MoveDesc;

    public List<Text> attrNameList;
    public List<Text> attrValueTetx;

    public Text combatValue;

    public Button usingBtn;
    public Text usingBtnDesc;

    public GameObject remainTimePanel;
    public Text remainTimeDesc;

    public Text gainPath;

    public GameObject _FashionMenuItem;
    #endregion


    public enum AdvanceFashionType
    {
        Advance = 0,  //正常进阶获得
        Fashion = 1,  //活动获得
    }

    public void OnToggleClick(int _Index)
    {
        namePanel.SetActive(_Index == 0 ? true : false);
        attrPanel.SetActive(_Index == 1 ? true : false);

        for(int index = 0; index < menuItemMarkIconList.Count; index++)
        {
            menuItemMarkIconList[index].gameObject.SetActive(index == _Index ? true : false);
        }

        StartCoroutine(ShowTypeItem(_Index));
    }
    private List<int> curTypeGradeBaseIdList = new List<int>();
    private List<int> curTypeFashionIdList = new List<int>();
    private Dictionary<int, List<Tab_AdvanceBase>> baseDic;
    private Dictionary<int, List<Tab_AdvanceFashion>> fashionDic;
   IEnumerator ShowTypeItem(int _Index)
    {
        switch (_Index)
        {
            case (int)AdvanceFashionType.Advance:
                for (int index = 0; index < advanceItemPrefabList.Count; index++)
                {
                    advanceItemPrefabList[index].SetActive(true);
                }
                for (int index = 0; index < fashionItemPrefabList.Count; index++)
                {
                    fashionItemPrefabList[index].SetActive(false);
                }
                //点击前刷新状态
                RefreshAdvanceItemState();

                if (advanceItemPrefabList.Count > 0)
                {
                    advanceItemPrefabList[0].GetComponent<AdvanceFashionItem>().OnItemClick();
                }
                break;
            default:
                ReqAdvancdFashionInfo();
                for (int index = 0; index < advanceItemPrefabList.Count; index++)
                {
                    advanceItemPrefabList[index].SetActive(false);
                }
                for (int index = 0; index < fashionItemPrefabList.Count; index++)
                {
                    fashionItemPrefabList[index].SetActive(true);
                }
                RefreshAdvanceItemState();
                if (fashionItemPrefabList.Count > 0)
                    fashionItemPrefabList[0].GetComponent<AdvanceFashionItem>().OnItemClick();
                break;
        }
        yield break;
    }

    IEnumerator GetAllTypeIdList()
    {
        yield return new WaitForEndOfFrame();
        if(curTypeGradeBaseIdList.Count != 0)
        {
            ShowDefaultFirst();
            yield break;
        }else
        {
            var baseDic = TableManager.GetAdvanceBase().Values;
            foreach (var baseInfo in baseDic)
            {
                if ((baseInfo.Id - baseInfo.Level) / 1000 - 1 == (int)AdvanceMountPanelCtr.Instance.m_AdvanceType)
                {
                    bool hasFind = false;
                    for (int index = 0; index < curTypeGradeBaseIdList.Count; index++)
                    {
                        Tab_AdvanceBase advanBase = TableManager.GetAdvanceBaseByID(curTypeGradeBaseIdList[index], 0);
                        if (advanBase == null)
                        {
                            yield break;
                        }
                        if (advanBase.Grade == baseInfo.Grade)
                        {
                            hasFind = true;
                            break;
                        }
                    }
                    if (!hasFind)
                    {
                        curTypeGradeBaseIdList.Add(baseInfo.Id);
                    }
                }
            }
            
            var fashionDic = TableManager.GetAdvanceFashion().Values;
            foreach (var fashionInfo in fashionDic)
            {
                if (fashionInfo.Type == (int)AdvanceMountPanelCtr.Instance.m_AdvanceType)
                {
                    curTypeFashionIdList.Add(fashionInfo.Id);
                }
            }

            IsNeedHideFashionMenuitem();
            CreateItemPrefab();
            yield break;
        }

       
    }

    //如果时装为0,需要隐藏按钮
    private void IsNeedHideFashionMenuitem()
    {
        _FashionMenuItem.SetActive(curTypeFashionIdList.Count > 0);
    }

    //刷新进阶状态以及活动时装是否佩戴,收到协议返回再处理
    public void RefreshAdvanceItemState()
    {
        for (int itemIndex = 0; itemIndex < advanceItemPrefabList.Count; itemIndex++)
        {
            Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId, 0);
            if (advanceBase == null)
            {
                return;
            }
            switch (AdvanceMountPanelCtr.Instance.m_AdvanceType)
            {
                case AdvanceBase.AdvanceType.Ride:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.RideGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.m_objMountParam.AutoFlagMountID
                         && GameManager.gameManager.PlayerDataPool.m_objMountParam.AutoFlagMountID != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Wing:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.WingGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                     (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWingId) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Piano:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.GodWeaponGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceGodweaponId) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Qilinbi:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.WishGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                      (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWishId) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Soul:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.SealGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                      (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceSealId) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Mask:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.MaskGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                      (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceMaskId) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Huopao:
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(advanceBase.Grade <= GameManager.gameManager.PlayerDataPool.m_AdvanceData.CrownGrade ? true : false);
                    advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                      (advanceItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceCrownId) ? true : false);
                    break;
            }
        }

        for(int itemIndex = 0; itemIndex < fashionItemPrefabList.Count; itemIndex++)
        {
            switch (AdvanceMountPanelCtr.Instance.m_AdvanceType)
            {
                case AdvanceBase.AdvanceType.Ride:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                       ( fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.m_objMountParam.AutoFlagMountID
                       && GameManager.gameManager.PlayerDataPool.m_objMountParam.AutoFlagMountID != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Wing:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWingId
                        && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWingId != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Piano:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                       ( fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceGodweaponId
                        && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceGodweaponId != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Qilinbi:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWishId 
                         && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceWishId  != -1)? true : false);
                    break;
                case AdvanceBase.AdvanceType.Mask:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceMaskId
                         && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceMaskId != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Soul:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceSealId
                         && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceSealId != -1) ? true : false);
                    break;
                case AdvanceBase.AdvanceType.Huopao:
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowUsingIcon(
                        (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceCrownId
                         && GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.AdvanceSealId != -1) ? true : false);
                    break;
            }

            if ((GameManager.gameManager.PlayerDataPool.m_AdvanceData.m_AdvanceFashionDic.ContainsKey(fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId)
                        && GameManager.gameManager.PlayerDataPool.m_AdvanceData.m_AdvanceFashionDic[fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId] >= 0))
            {
                fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(true);
                fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().SetRemainTime(GameManager.gameManager.PlayerDataPool.m_AdvanceData.m_AdvanceFashionDic[fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId]);
            }else
            {
                fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(false);
                fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().SetRemainTime(-1);
            }
        }
        RefreshDressBtnState();
    }

    public void RefreshDressBtnState()
    {
        //刷新幻化Item状态

        for (int index = 0; index < fashionItemPrefabList.Count; index++)
        {
            if (fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().advanceFashionId == lastModelId)
            {
                fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().OnItemClick();
            }
        }

        for (int index = 0; index < advanceItemPrefabList.Count; index++)
        {
            if (advanceItemPrefabList[index].GetComponent<AdvanceFashionItem>().advanceFashionId == lastModelId)
            {
                advanceItemPrefabList[index].GetComponent<AdvanceFashionItem>().OnItemClick();
            }
        }
    }

    //活动相关时装在收到返回协议的时候刷新是否激活的状态
    public void ReceiveAdvanceFashionPacket(GC_ADVANCE_FASHION_INFO packet)
    {
        //时装状态
        for (int itemIndex = 0; itemIndex < fashionItemPrefabList.Count; itemIndex++)
        {
            bool hasFind = false;
            for (int index = 0; index < packet.infoCount; index++)
            {
                if (fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId != -1
                && fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().advanceFashionId == packet.GetInfo(index).Id
                && packet.GetInfo(index).Time >= 0)
                {
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().SetRemainTime(packet.GetInfo(index).Time);
                    hasFind = true;
                    fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(true);
                }
            }
            if(!hasFind)
            {
                fashionItemPrefabList[itemIndex].GetComponent<AdvanceFashionItem>().ShowActiviteIcon(false);
            }
        }

        //刷新(使用中/幻化)状态
        for(int index = 0; index < fashionItemPrefabList.Count; index++)
        {
            if(fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().advanceFashionId == lastModelId)
            {
                fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().OnItemClick();
            }
        }
    }

    private int lastModelId = -1;

    public void OnItemClick(int _Id, int _Type)
    {
        if(gameObject.activeInHierarchy)
        {
            StartCoroutine(OnAdvanceFashionItemClick(_Id, _Type));
        }
    }
    public GameObject DoubleRideSign;//双骑相关
    public GameObject L_DoubleMountBtn;
    IEnumerator OnAdvanceFashionItemClick(int id, int type)
    {
        yield return new WaitForEndOfFrame();
        lastModelId = id;

        //双骑标记----------------------------------------------------------
        Tab_AdvanceFashion m_advanceFashion = TableManager.GetAdvanceFashionByID(id, 0);
        L_DoubleMountBtn = FunctionButtonLogic.Instance().DoubleMountBtnBg;
        if (m_advanceFashion != null)
        {
            Tab_MountBase mountBases = TableManager.GetMountBaseByID(m_advanceFashion.ModelId, 0);
            if (DoubleRideSign)
                DoubleRideSign.gameObject.SetActive(mountBases != null ? mountBases.DoubleRiding == 1 : false); //判断双人坐骑
            if (L_DoubleMountBtn)
            {
                L_DoubleMountBtn.gameObject.SetActive(mountBases != null ? mountBases.DoubleRiding == 1 : false); //判断双人坐骑
            }
        }
        else
        {
            DoubleRideSign.gameObject.SetActive(false);
            L_DoubleMountBtn.gameObject.SetActive(false);
        }

        //------------------------------------------------------------------

        switch (type)
        {
            case (int)AdvanceFashionType.Advance:
                {
                    attrPanel.SetActive(false);
                    Tab_AdvanceBase advanceBase = TableManager.GetAdvanceBaseByID(id, 0);
                    if (advanceBase == null)
                    {
                        yield break;
                    }
                    gainPath.text = StrDictionary.GetClientDictionaryString("#{44038}", advanceBase.GainPath);
                    cameraTexture.gameObject.SetActive(true);
                    switch (AdvanceMountPanelCtr.Instance.m_AdvanceType)
                    {
                        case AdvanceBase.AdvanceType.Ride:
                            {
                                Tab_MountBase mountBase = TableManager.GetMountBaseByID(advanceBase.ModelId, 0);
                                if (mountBase == null)
                                {
                                    yield break;
                                }
                                Tab_CharMount charMount = TableManager.GetCharMountByID(mountBase.ModelID, 0);
                                if (charMount == null)
                                {
                                    yield break;
                                }
                                cameraTexture.InitMountModelPath(charMount);
                                modelName.text = mountBase.Name;
                                gradeText.text = GCGame.Utils.GetGradeString(advanceBase.Grade);
                            }
                            break;
                        case AdvanceBase.AdvanceType.Wing:
                            {
                                cameraTexture.InitWingModelPath(advanceBase);
                                gradeText.text = GCGame.Utils.GetGradeString(advanceBase.Grade);
                                modelName.text = advanceBase.Name;
                            }
                            break;
                        default:
                            {
                                cameraTexture.gameObject.SetActive(true);
                                Tab_CharModel charModel = TableManager.GetCharModelByID(advanceBase.ModelId, 0);
                                if(charModel != null)
                                {
                                    cameraTexture.InitModelPath(charModel.ResPath, charModel, LoadAssetBundle.BUNDLE_PATH_MODEL, true);
                                }
                                modelName.text = advanceBase.Name;
                                gradeText.text = GCGame.Utils.GetGradeString(advanceBase.Grade);
                            }
                            break;
                    }
                }
                break;
            default:
                {
                    Tab_AdvanceFashion advanceFashion = TableManager.GetAdvanceFashionByID(id, 0);
                    if (advanceFashion == null)
                    {
                        yield break; ;
                    }
                    gainPath.text = gainPath.text = StrDictionary.GetClientDictionaryString("#{44038}", advanceFashion.GainPath);

                    if(advanceFashion.GetAttrIdbyIndex(0) == -1)
                    {
                        attrPanel.SetActive(false);
                    }else
                    {
                        attrPanel.SetActive(true);
                        for (int index = 0; index < advanceFashion.getAttrIdCount(); index++)
                        {
                            if (advanceFashion.GetAttrIdbyIndex(index) != -1)
                            {
                                attrNameList[index].gameObject.SetActive(true);
                                attrValueTetx[index].gameObject.SetActive(true);

                                int strId = advanceFashion.GetAttrIdbyIndex(index) + 10000;
                                attrNameList[index].text = StrDictionary.GetClientDictionaryString("#{" + strId + "}") + ":";
                                attrValueTetx[index].text = advanceFashion.GetAttrValuebyIndex(index).ToString();
                            }
                            else
                            {
                                attrNameList[index].gameObject.SetActive(false);
                                attrValueTetx[index].gameObject.SetActive(false);
                            }
                        }
                        combatValue.text = advanceFashion.CombatValue.ToString();
                    }
                    _MoveDesc.gameObject.SetActive(AdvanceMountPanelCtr.Instance.m_AdvanceType == AdvanceBase.AdvanceType.Ride);
                    switch (AdvanceMountPanelCtr.Instance.m_AdvanceType)
                    {
                        case AdvanceBase.AdvanceType.Ride:
                            {
                                //刷新模型
                                cameraTexture.gameObject.SetActive(true);
                                //animationPanel.gameObject.SetActive(false);
                                Tab_MountBase mountBase = TableManager.GetMountBaseByID(advanceFashion.ModelId, 0);
                                if (mountBase == null)
                                {
                                    yield break; ;
                                }
                                Tab_CharMount charMount = TableManager.GetCharMountByID(mountBase.ModelID, 0);
                                if (charMount == null)
                                {
                                    yield break; ;
                                }
                                _MoveDesc.text = StrDictionary.GetClientDictionaryString("#{3243}", mountBase.Speed - 100);
                                cameraTexture.InitMountModelPath(charMount);
                                modelName.text = mountBase.Name;
                            }
                            break;
                        case AdvanceBase.AdvanceType.Wing:
                            {
                                cameraTexture.gameObject.SetActive(true);
                                //animationPanel.gameObject.SetActive(false);
                                var auraConfig = TableManager.GetAuraConfigByID(advanceFashion.ModelId, 0);
                                if(auraConfig == null)
                                {
                                    yield break;
                                }

                                Tab_WeaponModel weapon = TableManager.GetWeaponModelByID(auraConfig.LiuShanWingModelId, 0);
                                if(weapon == null)
                                {
                                    LogModule.WarningLog("weapon is null");
                                    yield break;
                                }
                                cameraTexture.InitWingModelPath(null, weapon, delegate() {
                                    cameraTexture.gameObject.SetActive(true);
                                });
                            }
                            break;
                        default:
                            {
                                cameraTexture.gameObject.SetActive(true);
                                Tab_CharModel charModel = TableManager.GetCharModelByID(advanceFashion.ModelId, 0);
                                if(charModel  != null)
                                {
                                    cameraTexture.InitModelPath(charModel.ResPath, charModel);
                                }
                            }
                            break;
                    }
                }
                break;
        }
        yield break;
    }

    public void SetFashionItemMarkIcon(int type, int _Index)
    {
        switch(type)
        {
            case (int)AdvanceFashionType.Advance:
                {
                    for(int index = 0; index < advanceItemPrefabList.Count; index++)
                    {
                        advanceItemPrefabList[index].GetComponent<AdvanceFashionItem>().ShowMarkIcon(index == _Index ? true : false);
                    }
                }
                break;
            default:
                for (int index = 0; index < fashionItemPrefabList.Count; index++)
                {
                    fashionItemPrefabList[index].GetComponent<AdvanceFashionItem>().ShowMarkIcon(index == _Index ? true : false);
                }
                break;
        }
    }

    private bool IsHavaFashionInBack(int type, int itemId)
    {
        GameItemContainer container = GameManager.gameManager.PlayerDataPool.BackPack;
        List<GameItem> backpackItems = ItemTool.ItemFilter(container, 0);
        if (container == null)
        {
            return false;
        }

        foreach (var item in backpackItems)
        {
            if(item.GetClass() == (int)ItemClass.ADVANCEFASHION
                && item.GetSubClass() == type
                && item.DataID == itemId)
            {
                return true;
            }
        }

        return false;
    }


    private bool canActivite = false;
    private bool showGetPath = false;
    private bool showDress = false;

    private int activiteItemId = -1;
    private int pathId = -1;

    readonly string _LockColor = "<color=#515053>{0}</color>";
    readonly string _UnLockColor = "<color=#745146>{0}</color>";
    public void InitUsingBtnState(bool isUsing, bool isOwn, int remainTime, int type, int itmeId, int getPathId)//剩余时间(0代表永久,-1代表删除)
    {
        pathId = getPathId;
        if (remainTime < 0)
        {
            remainTimePanel.SetActive(false);
            if (type == 0)  //坐骑 正常进阶获取
            {
                usingBtn.interactable = false;
                usingBtnDesc.text = string.Format(_LockColor, StrDictionary.GetClientDictionaryString("#{43014}"));

                canActivite = false;
                showDress = false;
                showGetPath = false;
            }
            else  //时装 1.背包有对应道具显示激活 2.背包没有显示获取途径
            {
                remainTimeDesc.text = StrDictionary.GetClientDictionaryString("#{43016}");  //永久拥有
                if (getPathId != -1)
                    usingBtn.interactable = true;
                else
                    usingBtn.interactable = false;
                if (IsHavaFashionInBack(type, itmeId))
                {
                    //显示为可激活
                    usingBtnDesc.text = string.Format(_UnLockColor, StrDictionary.GetClientDictionaryString("#{42653}")); ;

                    canActivite = true;
                    showGetPath = false;
                    showDress = false;

                    activiteItemId = itmeId;
                }
                else
                {
                    //显示为获取途径
                    usingBtnDesc.text = string.Format(_UnLockColor, StrDictionary.GetClientDictionaryString("#{42657}")); ;
                    canActivite = false;
                    showGetPath = true;
                    showDress = false;
                }
            }
        }else if(remainTime == 0)  //永久拥有
        {
            remainTimePanel.SetActive(true);
            if (isUsing)  //使用中
            {
                canActivite = false;
                showDress = false;
                showGetPath = false;

                remainTimePanel.SetActive(true);
                remainTimeDesc.text = StrDictionary.GetClientDictionaryString("#{43016}");

                usingBtn.interactable = false;
                usingBtnDesc.text = string.Format(_LockColor, StrDictionary.GetClientDictionaryString("#{43013}"));
            }
            else  //可以幻化
            {
                canActivite = false;
                showDress = true;
                showGetPath = false;

                remainTimePanel.SetActive(true);
                remainTimeDesc.text = StrDictionary.GetClientDictionaryString("#{43016}");

                usingBtn.interactable = true;
                usingBtnDesc.text = string.Format(_UnLockColor, StrDictionary.GetClientDictionaryString("#{43015}"));
            }
        }
        else  //已激活
        {
            remainTimePanel.SetActive(true);
            int remainDay = remainTime / (3600 * 24);
            int remainHour = (remainTime - remainDay * 3600 * 24) / 3600;
            int remainSec = (remainTime - remainDay * 3600 * 24 - remainHour * 3600) / 60;
            remainTimeDesc.text = StrDictionary.GetClientDictionaryString("#{43017}", remainDay, remainHour, remainSec);

            if (isUsing)  //使用中
            {
                canActivite = false;
                showDress = false;
                showGetPath = false;

                usingBtn.interactable = false;
                usingBtnDesc.text = string.Format(_LockColor, StrDictionary.GetClientDictionaryString("#{43013}"));
            }
            else  //可以幻化
            {
                canActivite = false;
                showDress = true;
                showGetPath = false;

                usingBtn.interactable = true;
                usingBtnDesc.text = string.Format(_UnLockColor, StrDictionary.GetClientDictionaryString("#{43015}"));
            }
        }
    }
    
    public void OnUsingBtnClick()
    {
        if(showDress)
        {
            CG_REQ_ADVANCE req = (CG_REQ_ADVANCE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_ADVANCE);
            req.SetOptionType((int)AdvanceBase.ReqType.CHANGE_USEID);
            req.SetType((int)AdvanceMountPanelCtr.Instance.m_AdvanceType);
            req.SetParam1(lastModelId);
            req.SetParam2(-1);
            req.SendPacket();

        }
        else if(canActivite)
        {
            //关闭当前的进阶界面
            UIManager.CloseUI(UIInfo.AdvanceMountPanel);
            //跳转到背包界面
            UIManager.ShowUI(UIInfo.BackPackRoot, delegate(bool bSucess, object param) {
                if(bSucess)
                {
                    BackPackLogic.Instance()._TagPanel.ShowPage(0);
                }
            });
        }
        else if(showGetPath)
        {
            ItemTooltipsLogic.ShowItemTooltip(pathId, ItemTooltipsLogic.ShowType.GetPath, usingBtn.transform.position);
        }
    }

    private void OnDisable()
    {
        curTypeGradeBaseIdList.Clear();
        curTypeFashionIdList.Clear();
        for(int index = 0; index < advanceItemPrefabList.Count; index++)
        {
            GameObject.Destroy(advanceItemPrefabList[index]);
        }
        advanceItemPrefabList.Clear();

        for(int index = 0; index < fashionItemPrefabList.Count; index++)
        {
            GameObject.Destroy(fashionItemPrefabList[index]);
        }
        fashionItemPrefabList.Clear();
    }
}