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

public class EquipZhihuanRoot : UIControllerBase<EquipZhihuanRoot>
{
    void OnEnable()
    {
        SetInstance(this);
    }

    void OnDisable()
    {
        SetInstance(null);
    }

    public void UpdateEquip()
    {
        InitEquipSingle(_SelectedItem, _IsNoGem > 0);
    }

    public void UpdateZhihuan(GC_EQUIP_PROPBAR_BAPTIZE_PROP_UPDATE packet)
    {
        UpdateEquipAttr(packet.Updatepropbarid - 1);
        _MaterialSlot.UpdateNum();
        _ZhihuanTimes.text = StrDictionary.GetClientDictionaryString("#{5305}", _SelectedItem.ZhihuanTimes);
        if ((_SelectedItem.GetQuality() == ItemQuality.QUALITY_PINK || _SelectedItem.GetQuality() == ItemQuality.QUALITY_GOLD) && _SelectedItem.ZhihuanTimes >= 100)
        {
            _BtnHuanyuan.SetActive(true);
            _Disable_BtnHuanyuan.SetActive(false);
        }
        else
        {
            _BtnHuanyuan.SetActive(false);
            _Disable_BtnHuanyuan.SetActive(true);
        }
    }

    public void CloseWindow()
    {
        UIManager.CloseUI(UIInfo.EquipZhihuan);
        UIManager.ShowUI(UIInfo.EquipEnhance);
        if (EquipEnhanceXilian.Instance() != null)
        {
            EquipEnhanceXilian.Instance().OnXilianPage(2);
        }
    }

    #region show


    public static void Show(GameItem selectedItem, bool isAuto)
    {
        Hashtable hash = new Hashtable();
        hash.Add("SelectedItem", selectedItem);
        hash.Add("IsAuto", isAuto);

        UIManager.ShowUI(UIInfo.EquipZhihuan, EquipZhihuanRoot.ShowUIOver, hash);
    }

    static void ShowUIOver(bool bSuccess, object param)
    {
        if (bSuccess)
        {
            Hashtable hash = param as Hashtable;
            if (EquipZhihuanRoot.Instance() != null)
            {
                EquipZhihuanRoot.Instance().ShowInner((GameItem)hash["SelectedItem"], (bool)hash["IsAuto"]);
            }
        }
    }

    void ShowInner(GameItem selectedItem, bool isNoGem)
    {
        InitEquipSingle(selectedItem, isNoGem);
    }

    #endregion

    #region single

    public UIContainerBase _PropOrg;
    public Text _PropCombatValue;
    public CommonItemEquipItem _EquipItemSlot;
    public CommonItemMaterialSlot _MaterialSlot;
    public Toggle _OnlyUseBindMaterial;
    public Text _ZhihuanTimes;
    public GameObject _TargetAttrPanel;
    public Text[] _TargetAttrs;
    public EquipXilianAttrItem[] _XilianAttrs;
    public GameObject _BtnHuanyuan;
    public GameObject _Disable_BtnHuanyuan;

    private GameItem _SelectedItem;
    private int _IsNoGem;
    private Tab_EquipPropBarReplaceConsume _TabConsume;
    public void InitEquipSingle(GameItem equipItem, bool isNoGem)
    {
        _SelectedItem = equipItem;
        _IsNoGem = isNoGem?1:0;

        _EquipItemSlot.InitItem(_SelectedItem);
        _OnlyUseBindMaterial.isOn = true;

        //Hashtable equipHash = new Hashtable();
        //equipHash.Add("EquipItem", equipItem);
        //_PropOrg.InitContentItem(equipItem.ExAttrs, null, equipHash);

        UpdateEquipAttr();

        _ZhihuanTimes.text = StrDictionary.GetClientDictionaryString("#{5305}", equipItem.ZhihuanTimes);
        if ((_SelectedItem.GetQuality() == ItemQuality.QUALITY_PINK || _SelectedItem.GetQuality() == ItemQuality.QUALITY_GOLD) && equipItem.ZhihuanTimes >= 100)
        {
            _BtnHuanyuan.SetActive(true);
            _Disable_BtnHuanyuan.SetActive(false);
        }
        else
        {
            _BtnHuanyuan.SetActive(false);
            _Disable_BtnHuanyuan.SetActive(true);
        }

        var consumeTabs = TableManager.GetEquipPropBarReplaceConsume().Values;
        int equipLevel = _SelectedItem.GetMinLevelRequire();
        int equipQuality = (int)_SelectedItem.GetQuality();
        foreach (var consumeTab in consumeTabs)
        {
            if (consumeTab.LevleID >= equipLevel && consumeTab.Quality == equipQuality && consumeTab.Type1 == _IsNoGem)
            {
                _TabConsume = consumeTab;
                _MaterialSlot.InitMaterial(consumeTab.ConsumeSubType1, consumeTab.ConsumeNum1, true);
                break;
            }
        }
    }

    private void UpdateEquipAttr()
    {
        for (int i = 0; i < _XilianAttrs.Length; ++i)
        {
            if (_SelectedItem.ExAttrs.Count > i)
            {
                _XilianAttrs[i].gameObject.SetActive(true);
                _XilianAttrs[i].ShowReplaceAttr(_SelectedItem.ExAttrs[i], _SelectedItem);
            }
            else
            {
                _XilianAttrs[i].gameObject.SetActive(false);
            }
        }

        _PropCombatValue.text = CombatValue.CalculateEquipSingle(_SelectedItem).ToString();
    }

    private void UpdateEquipAttr(int idx)
    {
        for (int i = 0; i < _XilianAttrs.Length; ++i)
        {
            if (_SelectedItem.ExAttrs.Count > i)
            {
                if (idx == i)
                {
                    _XilianAttrs[idx].ShowReplaceOrigin(_SelectedItem.ExAttrs[idx], _SelectedItem);
                }
                else
                {
                    _XilianAttrs[i].gameObject.SetActive(true);
                    _XilianAttrs[i].ShowReplaceAttr(_SelectedItem.ExAttrs[i], _SelectedItem);
                }
            }
            else
            {
                _XilianAttrs[i].gameObject.SetActive(false);
            }
        }

        //_PropCombatValue.text = CombatValue.CalculateXilian(_SelectedItem.ExAttrs, _SelectedItem.DataID).ToString();
        _PropCombatValue.text = CombatValue.CalculateEquipSingle(_SelectedItem).ToString();
    }

    public void IsOnlyUseBind(bool isUse)
    {
        if (_TabConsume != null)
        {
            _MaterialSlot.InitMaterial(_TabConsume.ConsumeSubType1, _TabConsume.ConsumeNum1, isUse);
        }
    }

    public void OnZhihuanClick()
    {
        if (_SelectedItem.ExAttrsNew.Count > 0)
            MessageBoxLogic.OpenOKCancelBox(5355, -1, OnZhihuanClickOk);
        else
            OnZhihuanClickOk();
    }

    public void OnZhihuanClickOk()
    {
        if (!_MaterialSlot.IsMaterialEnough())
        {
            GUIData.AddNotifyData("#{5325}");
            return;
        }

        CG_EQUIP_PROPBAR_BAPTIZE_PROP_UPDATE packet = (CG_EQUIP_PROPBAR_BAPTIZE_PROP_UPDATE)PacketDistributed.CreatePacket(MessageID.PACKET_CG_EQUIP_PROPBAR_BAPTIZE_PROP_UPDATE);
        if (_SelectedItem.IsPlayerEquiped())
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_EQUIPPACK;
        }
        else
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_BACKPACK;
        }
        packet.Equipguid = _SelectedItem.Guid;
        packet.Isnodiamond = _IsNoGem;
        packet.SendPacket();

        //TestPro();
    }

    public void OnHuanYuanClick()
    {
        if (_SelectedItem.ExAttrsNew.Count > 0)
            MessageBoxLogic.OpenOKCancelBox(5355, -1, OnHuanYuanClickOk);
        else
            OnHuanYuanClickOk();
    }

    public void OnHuanYuanClickOk()
    {
        CG_RESET_EQUIP_PROPBAR packet = (CG_RESET_EQUIP_PROPBAR)PacketDistributed.CreatePacket(MessageID.PACKET_CG_RESET_EQUIP_PROPBAR);
        if (_SelectedItem.IsPlayerEquiped())
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_EQUIPPACK;
        }
        else
        {
            packet.Packtype = (int)GameItemContainer.Type.TYPE_BACKPACK;
        }
        packet.Equipguid = _SelectedItem.Guid;
        packet.SendPacket();
    }

    static int times = 0;
    private void TestPro()
    {
        
        _SelectedItem.ExAttrs[times].XilianValue = 12;
        UpdateEquipAttr(times);

        ++times;
    }

    public void OnShowTargetAttr()
    {
        _TargetAttrPanel.SetActive(true);

        var xilianTargetTab = TableManager.GetEquipBaptizeReplaceTargetByID(_SelectedItem.GetEquipSlotIndex());
        foreach(var item in xilianTargetTab)
        {
            if (item.Quality == (int)_SelectedItem.GetQuality())
            {
                for (int i = 0; i < _TargetAttrs.Length; ++i)
                {
                    _TargetAttrs[i].gameObject.SetActive(false);

                    if (item.getTargetCount() < i)
                    {
                        continue;
                    }

                    int propID = item.GetTargetbyIndex(i);
                    if (propID < 0)
                        continue;

                    _TargetAttrs[i].gameObject.SetActive(true);
                    _TargetAttrs[i].text = PropID.GetAttrName((PropID.PropertyID)propID, -1, -1);
                }
            }
        }
    }

    public void OnHideTargetAttr()
    {
        _TargetAttrPanel.SetActive(false);
    }

    public void OnBtnHelp()
    {
        MessageHelpLogic.ShowHelpMessage(19);
    }

    #endregion

}