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

public class EquipEnhanceXilian : UIControllerBase<EquipEnhanceXilian>
{

	// Use this for initialization
	void OnEnable ()
    {
        _TagPanel.ShowPage(0);
        OnXilianPage(0);

        SetInstance(this);

        GUIData.delMoneyChanged += UpdateOwnMoney;
    }

    void OnDisable()
    {
        SetInstance(null);

        GUIData.delMoneyChanged -= UpdateOwnMoney;
    }

    public void UpdateEquip()
    {
        //OnXilianPage(_TagPanel.GetShowingPage());
        //RefreshUpdateInfos();
        if (_CitiaoEquipItem.gameObject.activeInHierarchy)
        {
            OnSelectEquipXilian1(_SelectedEquip);
        }
        else if (_BaseXilianAttrs.gameObject.activeInHierarchy)
        {
            UpdateXilian2();
        }
        else
        {
            OnSelectEquipXilian3(_SelectedEquip);
        }
        
    }

    public void RefreshUpdateInfos()
    {
        if (!_EquipEnhanceRoot.RefreshItems())
        {
            _EquipEnhanceRoot.InitAllEquipList();

            List<GameItem> equipQuality;

            // 对于词条置换,不加入白色,绿色,蓝色装备
            if (_TagPanel.GetShowingPage() == 2)
            {
                equipQuality = _EquipEnhanceRoot._AllEquipList.FindAll((equipItem) =>
                {
                    if (equipItem.GetQuality() == ItemQuality.QUALITY_WHITE)
                        return false;
                    if (equipItem.GetQuality() == ItemQuality.QUALITY_GREEN)
                        return false;
                    if (equipItem.GetQuality() == ItemQuality.QUALITY_BLUE)
                        return false;
                    return true;
                });
            }
            // 对于词条洗练、基础洗练,不加入白色,绿色,蓝色装备
            else
            {
                equipQuality = _EquipEnhanceRoot._AllEquipList.FindAll((equipItem) =>
                {
                    if (equipItem.GetQuality() == ItemQuality.QUALITY_WHITE)
                        return false;
                    if (equipItem.GetQuality() == ItemQuality.QUALITY_GREEN)
                        return false;
                    return true;
                });
            }

            List<GameItem> selectedItem = new List<GameItem>();
            selectedItem.Add(_SelectedEquip);
            _EquipEnhanceRoot._EquipContainer.InitSelectContent(equipQuality, selectedItem, OnSelectEquipXilian);
        }
    }

    public EquipEnhanceRoot _EquipEnhanceRoot;

    #region page

    public UITagPanel _TagPanel;

    public void OnXilianPage(int page)
    {
        // 每次开始显示,激活装备容器
        _EquipEnhanceRoot._EquipContainer.gameObject.SetActive(true);
        // 初始化装备列表
        _EquipEnhanceRoot.InitAllEquipList();

        _EquipEnhanceRoot._EquipContainer._IsMultiSelect = false;
        if (_EquipEnhanceRoot._AllEquipList.Count == 0)
        {
            _EquipEnhanceRoot._EquipContainer.InitSelectContent(_EquipEnhanceRoot._AllEquipList, null);
            OnSelectEquipXilian1(null);
            OnSelectEquipXilian2(null);
            OnSelectEquipXilian3(null);
            return;
        }

        List<GameItem> equipQuality;

        // 对于词条置换,不加入白色,绿色,蓝色装备
        if (page == 2)
        {
            equipQuality = _EquipEnhanceRoot._AllEquipList.FindAll((equipItem) =>
            {
                if (equipItem.GetQuality() == ItemQuality.QUALITY_WHITE)
                    return false;
                if (equipItem.GetQuality() == ItemQuality.QUALITY_GREEN)
                    return false;
                if (equipItem.GetQuality() == ItemQuality.QUALITY_BLUE)
                    return false;
                return true;
            });
        }
        // 对于词条洗练、基础洗练,不加入白色,绿色,蓝色装备
        else
        {
            equipQuality = _EquipEnhanceRoot._AllEquipList.FindAll((equipItem) =>
            {
                if (equipItem.GetQuality() == ItemQuality.QUALITY_WHITE)
                    return false;
                if (equipItem.GetQuality() == ItemQuality.QUALITY_GREEN)
                    return false;
                return true;
            });
        }

        if (equipQuality.Count == 0)
        {

            _EquipEnhanceRoot._EquipContainer.InitSelectContent(equipQuality, null);
            OnSelectEquipXilian1(null);
            OnSelectEquipXilian2(null);
            OnSelectEquipXilian3(null);
            return;
        }

        var lastSelects = _EquipEnhanceRoot._EquipContainer.GetSelecteds<GameItem>();

        List<GameItem> selectedItem = new List<GameItem>();
        if (EquipEnhanceRoot._DefaultSelectedItem != null 
            && equipQuality.Contains(EquipEnhanceRoot._DefaultSelectedItem)
            && EquipEnhanceRoot._DefaultSelectedPage == 0)
        {
            selectedItem.Add(EquipEnhanceRoot._DefaultSelectedItem);
            EquipEnhanceRoot._DefaultSelectedPage = -1;
            EquipEnhanceRoot._DefaultSelectedItem = null;
        }
        else if(lastSelects != null)
        {
            for(int i = 0; i < lastSelects.Count; i++)
            {
                if(equipQuality.Contains(lastSelects[i]))
                {
                    selectedItem.Add(lastSelects[i]);
                    break;
                }
            }
        }

        if(selectedItem.Count == 0)
        {
            selectedItem.Add(equipQuality[0]);
        }

        _BaseXilianMoneyReplace.isOn = false;

        Hashtable hash = new Hashtable();
        hash.Add("XiLianTips", true);

        _EquipEnhanceRoot._EquipContainer.InitSelectContent(equipQuality, selectedItem, OnSelectEquipXilian, null, hash);
    }

    public void OnSelectEquipXilian(object equipObj)
    {
        switch (_TagPanel.GetShowingPage())
        {
            case 0:
                OnSelectEquipXilian1(equipObj);
                break;
            case 1:
                OnSelectEquipXilian2(equipObj);
                break;
            case 2:
                OnSelectEquipXilian3(equipObj);
                break;
        }
    }

    #region 词条洗练
    
    public CommonItemEquipItem _CitiaoEquipItem;
    public CommonItemMaterialSlot _CitiaoMaterialSlot;

    private GameItem _SelectedEquip;

    public void OnSelectEquipXilian1(object equipObj)
    {
        GameItem equipItem = equipObj as GameItem;
        if (equipItem == null)
        {
            _SelectedEquip = null;
            _CitiaoEquipItem.InitItem(null);
            _CitiaoMaterialSlot.InitMaterial(-1, -1);
            return;
        }

        _SelectedEquip = equipItem;
        _CitiaoEquipItem.InitItem(_SelectedEquip);

        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)
            {
                if (consumeTab.ConsumeSubType > 0 && consumeTab.ConsumeNum > 0)
                {
                    _CitiaoMaterialSlot.InitMaterial(consumeTab.ConsumeSubType, consumeTab.ConsumeNum);
                }
                else
                {
                    _CitiaoMaterialSlot.InitMaterial(-1, -1);
                }
                break;
            }
        }
    }

    public void OnBtnXilian()
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        if (_CitiaoMaterialSlot._ItemDataID < 0 || _CitiaoMaterialSlot.NeedNum <= 0)
        {
            GUIData.AddNotifyData("#{5437}");
            return;
        }
        EquipXilianRoot.Show(_SelectedEquip, false);

    }

    public void OnBtnAutoXilian()
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        if (_CitiaoMaterialSlot._ItemDataID < 0 || _CitiaoMaterialSlot.NeedNum <= 0)
        {
            GUIData.AddNotifyData("#{5437}");
            return;
        }

        EquipXilianRoot.Show(_SelectedEquip, true);
    }
    #endregion

    #region 基础洗练
    //基础洗练
    public UIContainerBase _BaseXilianAttrs;
    public GameObject _MaterialPanel;
    public GameObject _YuanbaoPanel;
    public CommonItemMaterialSlot _BaseXilianMaterialSlot;
    public UICurrencyItem _MoneyCost;
    public UICurrencyItem _MoneyOwn;
    public Toggle _BaseXilianMoneyReplace;

    private bool _UpdateEffect = false;

    private Tab_EquipBasicBaptizeConsume _TabBasicConsume;
    public void OnSelectEquipXilian2(object equipObj)
    {
        _BaseXilianMoneyReplace.isOn = false;
        GameItem equipItem = equipObj as GameItem;
        if (equipItem == null)
        {
            _SelectedEquip = null;
            _BaseXilianAttrs.InitContentItem(null);
            _BaseXilianMaterialSlot.InitMaterial(-1, -1);
            _MoneyCost.ShowCurrency(MONEYTYPE.MONEYTYPE_COIN, 0);
            _MoneyOwn.ShowOwnCurrency(MONEYTYPE.MONEYTYPE_COIN);
            return;
        }

        _SelectedEquip = equipItem;
        _BaseXilianAttrs.InitContentItem(_SelectedEquip.BaseAttrs);
        //_BaseXilianMaterialSlot.InitMaterial(56503, 5);
        _MoneyCost.ShowCurrency(MONEYTYPE.MONEYTYPE_COIN, 0);
        _MoneyOwn.ShowOwnCurrency(MONEYTYPE.MONEYTYPE_COIN);

        var consumeTabs = TableManager.GetEquipBasicBaptizeConsume().Values;
        int equipLevel = equipItem.GetMinLevelRequire();
        int equipQuality = (int)equipItem.GetQuality();
        foreach (var consumeTab in consumeTabs)
        {
            if (consumeTab.MaxLevel >= equipLevel && consumeTab.Quality == equipQuality)
            {
                _TabBasicConsume = consumeTab;
                _BaseXilianMaterialSlot.InitMaterial(consumeTab.ConsumeSubType, consumeTab.ConsumeNum);
                break;
            }
        }
        UpdateCost();
    }

    public void UpdateOwnMoney()
    {
        if(_MoneyOwn.isActiveAndEnabled)
            _MoneyOwn.ShowOwnCurrency(MONEYTYPE.MONEYTYPE_YUANBAO);
    }

    public void UpdateXilian2()
    {
        Hashtable hash = new Hashtable();
        if (_UpdateEffect)
        {
            hash.Add("PlayEffect", true);
            _UpdateEffect = false;
        }
        _BaseXilianAttrs.InitContentItem(_SelectedEquip.BaseAttrs, null, hash);
        UpdateCost();
    }

    public void UpdateCost()
    {
        if (_TabBasicConsume != null)
        {

            _BaseXilianMaterialSlot.InitMaterial(_TabBasicConsume.ConsumeSubType, _TabBasicConsume.ConsumeNum);
            if (!_BaseXilianMaterialSlot.IsMaterialEnough() && _BaseXilianMoneyReplace.isOn)
            {
                bool materialInShop = false;
                var shopItems = TableManager.GetYuanBaoShop().Values;
                foreach (var shopItem in shopItems)
                {
                    if (shopItem.ItemID == _TabBasicConsume.ConsumeSubType
                        && shopItem.MoneyType == 1)
                    {
                        materialInShop = true;
                        _MoneyCost.ShowCurrency(MONEYTYPE.MONEYTYPE_YUANBAO, shopItem.PriceForever * _TabBasicConsume.ConsumeNum);
                        _MoneyOwn.ShowCurrency(MONEYTYPE.MONEYTYPE_YUANBAO, GameManager.gameManager.PlayerDataPool.GetLongPropty((int)CONSUM_TYPE.MONEY, (int)MONEYTYPE.MONEYTYPE_YUANBAO));
                        //_CostToggleTip.text = StrDictionary.GetClientDictionaryString("#{5386}") + PlayerData.MONEY.GetMoneyStr(MONEYTYPE.MONEYTYPE_YUANBAO);
                        break;
                    }
                }

                _MaterialPanel.SetActive(false);
                _YuanbaoPanel.SetActive(true);
            }
            else
            {
                _MaterialPanel.SetActive(true);
                _YuanbaoPanel.SetActive(false);
            }
        }
    }

    public void ShowCostMoney(bool isShowMoney)
    {
        UpdateCost();
    }

    public void OnBaseXilianClick()
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        if (!_BaseXilianMoneyReplace.isOn)
        {
            if (!_BaseXilianMaterialSlot.IsMaterialEnough())
            {
                GUIData.AddNotifyData("#{5324}");
                return;
            }
        }
        else
        {
            if (!JudgeMoneyLogic.IsMoneyEnough(MONEYTYPE.MONEYTYPE_YUANBAO, _MoneyCost.CurrencyIntValue))
            {
                return;
            }
        }

        bool isAttrFull = true;
        _BaseXilianAttrs.ForeachActiveItem<EquipXilianBaseItem>((baseItem) =>
        {
            if (baseItem._SingleAttr.value < 1)
                isAttrFull = false;
        });
        if (isAttrFull)
        {
            GUIData.AddNotifyData("#{5341}");
            return;
        }

        CG_EQUIP_BASIC_PROP_BAPTIZE packet = (CG_EQUIP_BASIC_PROP_BAPTIZE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_EQUIP_BASIC_PROP_BAPTIZE);
        if (_SelectedEquip.IsPlayerEquiped())
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_EQUIPPACK;
        }
        else
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_BACKPACK;
        }
        packet.Equipguid = _SelectedEquip.Guid;
        if (!_BaseXilianMoneyReplace.isOn)
        {
            packet.Isautopament = 0;
        }
        else
        {
            packet.Isautopament = 1;
        }
        packet.SendPacket();

        _UpdateEffect = true;
    }
    #endregion


    #region 词条置换

    public CommonItemEquipItem _ZhihuanEquipItem;
    public CommonItemMaterialSlot _ZhihuanMaterialSlot;
    public Toggle _NormalZhihuan;
    public Toggle _NogemZhihuan;
    public GameObject _BtnTips;
    public Text _ZhihuanTips;

    private bool _IsNoGemZhihuan;

    public void OnSelectEquipXilian3(object equipObj)
    {
        GameItem equipItem = equipObj as GameItem;
        _ZhihuanTips.text = StrDictionary.GetClientDictionaryString("#{5387}");
        if (equipItem == null)
        {
            _SelectedEquip = null;
            _ZhihuanEquipItem.InitItem(null);
            _NormalZhihuan.isOn = true;
            _NogemZhihuan.isOn = false;
            //OnZhihuanNormal(true);
            _ZhihuanMaterialSlot.InitMaterial(-1, -1);
            _BtnTips.gameObject.SetActive(true);
            return;
        }

        _SelectedEquip = equipItem;
        _ZhihuanEquipItem.InitItem(_SelectedEquip);
        _NormalZhihuan.isOn = true;
        _NogemZhihuan.isOn = false;
        OnZhihuanNormal(true);

        _BtnTips.gameObject.SetActive(true);
        foreach (var exAttr in _SelectedEquip.ExAttrs)
        {
            if (exAttr.XilianTab.PropID == (int)PropID.PropertyID.EQUIP_XILIAN_NOGEM)
            {
                _BtnTips.gameObject.SetActive(false);
                break;
            }
        }
    }

    public void OnZhihuanNormal(bool normalZhihuan)
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        if (normalZhihuan)
        {
            var consumeTabs = TableManager.GetEquipPropBarReplaceConsume().Values;
            int equipLevel = _SelectedEquip.GetMinLevelRequire();
            int equipQuality = (int)_SelectedEquip.GetQuality();
            foreach (var consumeTab in consumeTabs)
            {
                if (consumeTab.LevleID >= equipLevel && consumeTab.Quality == equipQuality && consumeTab.Type1 == 0)
                {
                    _ZhihuanMaterialSlot.InitMaterial(consumeTab.ConsumeSubType1, consumeTab.ConsumeNum1);
                    break;
                }
            }
            _IsNoGemZhihuan = false;
        }
    }

    public void OnZhihuanNoGem(bool nogemzhihuan)
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        if (nogemzhihuan)
        {
            var consumeTabs = TableManager.GetEquipPropBarReplaceConsume().Values;
            int equipLevel = _SelectedEquip.GetMinLevelRequire();
            int equipQuality = (int)_SelectedEquip.GetQuality();
            foreach (var consumeTab in consumeTabs)
            {
                if (consumeTab.LevleID >= equipLevel && consumeTab.Quality == equipQuality && consumeTab.Type1 == 1)
                {
                    _ZhihuanMaterialSlot.InitMaterial(consumeTab.ConsumeSubType1, consumeTab.ConsumeNum1);
                    break;
                }
            }
            _IsNoGemZhihuan = true;
        }
        else
        {
            OnZhihuanNormal(true);
        }
    }

    public void OnStartZhihuan()
    {
        if (_SelectedEquip == null)
        {
            GUIData.AddNotifyData("#{5383}");
            return;
        }

        EquipZhihuanRoot.Show(_SelectedEquip, _IsNoGemZhihuan);
    }

    public void NoGemTips()
    {
        GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{5343}"));
    }
    #endregion







    #endregion
}