using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Item;
using GCGame.Table;
using GCGame;

// 说明:
// 主要用于锻造系统中的装备列表
// 每次选中Item,_SelectGo就会激活,没选中,就不会。即一个Container中最多仅有一个_SelectGo激活
// 当Container中的选中数目少于多选限制时,选中会激活_hasAddedGO,没被选中时不会失活,仅当再次选中时失活。
public class EquipEnhanceItem : UIItemSelect
{
    public Text _EquipName;
    public Text _StrengthLv;
    public CommonItemEquipItem _EquipItemSlot;
    public GameObject[] _GemObjs;
    public Image[] _GemIcons;
    public Image[] _GemQuality;

    public GameItem _EquipItem;
    private Tab_CommonItem _TabCommonItem;
    public GameObject _HasAddedGO;                          // 用于显示已被添加

    private bool qianghuaTips;
    private bool xianqianTips;
    private bool kuanghuaTips;
    private bool xilianTips;

    public override void Show(Hashtable hash)
    {
        base.Show();

        _EquipItem = (GameItem)hash["InitObj"];

        qianghuaTips = false;
        xianqianTips = false;
        kuanghuaTips = false;
        xilianTips = false;
        if (hash.ContainsKey("QianghuaTips"))
        {
            qianghuaTips = (bool)hash["QianghuaTips"];
        }
        if (hash.ContainsKey("XiangqianTips"))
        {
            xianqianTips = (bool)hash["XiangqianTips"];
        }
        if (hash.ContainsKey("KuanghuaTips"))
        {
            kuanghuaTips = (bool)hash["KuanghuaTips"];
        }
        if (hash.ContainsKey("XiLianTips"))
        {
            xilianTips = (bool)hash["XiLianTips"];
        }
        InitEquipItem();

        if (qianghuaTips)
        {
            UpdateQianghuaTips();
        }
        else if (xianqianTips)
        {
            UpdateXiangqianTips();
        }
        else
        {
            _QianghuaTips.SetActive(false);
        }

        if (kuanghuaTips)
        {
            UpdateKuanghuaTips();
        }
        else if (xilianTips)
        {
            UpdateXilianDisable();
        }
        else
        {
            _EquipItemSlot._DisableFlag.SetActive(false);
        }
    }

    public bool RefreshEqupItem()
    {
        if (_EquipItem.DataID != _TabCommonItem.Id)
        {//物品id不一致?无法刷新
            return false;
        }
        else
        {
            InitEquipItem();

            if (qianghuaTips)
            {
                UpdateQianghuaTips();
            }
            else if (xianqianTips)
            {
                UpdateXiangqianTips();
            }
            else
            {
                _QianghuaTips.SetActive(false);
            }

            if (kuanghuaTips)
            {
                UpdateKuanghuaTips();
            }
            else
            {
                _EquipItemSlot._DisableFlag.SetActive(false);
            }
            return true;
        }
    }

    private void InitEquipItem()
    {
        _TabCommonItem = TableManager.GetCommonItemByID(_EquipItem.DataID, 0);
        if (_TabCommonItem == null)
        {
            return;
        }
        

        if(_EquipItem.StrengthLevel > 0)
        {
            _StrengthLv.gameObject.SetActive(true);
            _StrengthLv.text = StrDictionary.GetClientDictionaryString("#{6758}", _EquipItem.StrengthLevel);
        }
        else
        {
            _StrengthLv.gameObject.SetActive(false);
        }

        _EquipItemSlot.InitItem(_EquipItem);
        // 这地方要重新赋值名字,因为_EquipItemSlot会更新一次名字
        // 强化的装备列表要求特殊处理,不显示强化
        _EquipName.text = _EquipItem.GetEquipNameWithoutEnhance();

        var playerLevel = ObjManager.Instance.MainPlayer.BaseAttr.Level;

        for (int i = 0; i < _GemObjs.Length; ++i)
        {
            var consumeTab = TableManager.GetEquipPunchConsumeByID(i);
            if (_EquipItem.GemItems.Count <= i)
            {
                _GemObjs[i].gameObject.SetActive(false);
                continue;
            }

            if (_EquipItem.GemItems[i].IsValid())
            {
                _GemObjs[i].gameObject.SetActive(true);
                _GemIcons[i].gameObject.SetActive(true);
                _GemQuality[i].gameObject.SetActive(true);
                Tab_CommonItem tabItem = TableManager.GetCommonItemByID(_EquipItem.GemItems[i].DataID, 0);
                LoadAssetBundle.Instance.SetImageSprite(_GemIcons[i], tabItem.Icon);
                LoadAssetBundle.Instance.SetImageSprite(_GemQuality[i], Utils.GetItemQualityFrame(tabItem));
                if (tabItem.QualityEffect > 0)
                {
                    CommonItemContainerItem.ShowQualityEffect(true, tabItem.QualityEffect, _GemIcons[i].transform);
                }
                else
                {
                    CommonItemContainerItem.ShowQualityEffect(false, tabItem.QualityEffect, _GemIcons[i].transform);
                }

            }
            else if (consumeTab.OpenLevel <= playerLevel)
            {
                _GemObjs[i].gameObject.SetActive(true);
                _GemIcons[i].gameObject.SetActive(false);
                _GemQuality[i].gameObject.SetActive(false);
            }
            else
            {
                _GemObjs[i].gameObject.SetActive(false);
            }

        }
    }


    #region _hasAddedGO控制

    // 每次调用更改_hasAddedGO的激活状态
    public void Add()
    {
        if (_HasAddedGO != null)
        {
            _HasAddedGO.SetActive(!_HasAddedGO.activeSelf);
        }
    }

    public void UnAdd()
    {
        if (_HasAddedGO != null)
        {
            _HasAddedGO.SetActive(false);
        }
    }

    // 检查是否已经添加
    public bool hasAdd()
    {
        if (_HasAddedGO != null)
            return _HasAddedGO.activeSelf;
        return false;
    }

    #endregion

    #region qianghua tips

    public GameObject _QianghuaTips;

    public void UpdateQianghuaTips()
    {
        if (_EquipItem.IsPlayerEquiped())
        {
            var qianghuaTips = EquipEnhanceRoot.CanEquipQianhua(_EquipItem);
            if (qianghuaTips != EquipEnhanceRoot.QIANGHUA_TIP.NONE)
            {
                _QianghuaTips.SetActive(true);
                return;
            }
        }
        _QianghuaTips.SetActive(false);
    }

    public void UpdateXiangqianTips()
    {
        if (_EquipItem.IsPlayerEquiped())
        {
            if (EquipEnhanceRoot.CanEquipXiangqian(_EquipItem) || (_EquipItem.IsCanAnyGemLvUp()))
            {
                _QianghuaTips.SetActive(true);
                return;
            }
        }
        _QianghuaTips.SetActive(false);
    }

    #endregion

    #region kuanghua tips

    public void UpdateKuanghuaTips()
    {
        _EquipItemSlot._DisableFlag.SetActive(!EquipEnhanceRoot.CanEquipFrenzy(_EquipItem));
        _QianghuaTips.SetActive(EquipEnhanceRoot.CanEquipFrenzyMat(_EquipItem));
    }

    #endregion

    #region xilian tips

    public void UpdateXilianDisable()
    {
        var consumeTabs = TableManager.GetEquipPropBarBaptizeConsume().Values;
        int equipLevel = _EquipItem.GetMinLevelRequire();
        int equipQuality = (int)_EquipItem.GetQuality();
        foreach (var consumeTab in consumeTabs)
        {
            if (consumeTab.MaxLevel >= equipLevel && consumeTab.Quality == equipQuality && consumeTab.ConsumeNum > 0)
            {
                _EquipItemSlot._DisableFlag.SetActive(false);
                return;
            }
        }
        _EquipItemSlot._DisableFlag.SetActive(true);
    }

    #endregion
}