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

public class MarketPlayerBuy : UIControllerBase<MarketPlayerBuy>
{
    void Awake()
    {
        InitMenu();
    }
	// Use this for initialization
	void OnEnable ()
    {
        SetInstance(this);
        _BuyPage.SetActive(true);
        UpdatePage();
        GUIData.delMoneyChanged += UpdateMoney;

        if (_SelectedPage != null)
        {
            OnMenu(_SelectedPage);
        }
    }

    void OnDisable()
    {
        GUIData.delMoneyChanged -= UpdateMoney;
        SetInstance(null);
    }
	
	// Update is called once per frame
	void Update ()
    {
	
	}

    #region showPage

    public GameObject _BuyPage;

    public UIItemSelect _BtnFind;
    public UISubScollMenu _BuyItemMenu;
    public MarketFindPage _FindPage;
    public MarketEquipFilterPage _EquipFilterPaeg;
    public MarketItemClassPage _ItemClassPage;
    public MarketItemListPage _ItemListPage;
    public UICurrencyItem _OwnMoney;
    public GameObject _NoneWatchPanel;

    private bool _IsShowWatchPanel;

    public Market.MarketItemClass _SelectedPage;
    private void InitMenu()
    {
        _BuyItemMenu.PushMenu(new Market.MarketItemClass(999, 1));
        _BuyItemMenu.PushMenu(Market.GetMarketClassName(1, -1), new Market.MarketItemClass[2] { /*new Market.MarketItemClass(1, 1), */new Market.MarketItemClass(1, 2) , new Market.MarketItemClass(1, 3) });
        //_BuyItemMenu.PushMenu(Market.GetMarketClassName(2, -1), new Market.MarketItemClass[3] { new Market.MarketItemClass(2, 1), new Market.MarketItemClass(2, 2), new Market.MarketItemClass(2, 3) });
        //_BuyItemMenu.PushMenu(Market.GetMarketClassName(3, -1), new Market.MarketItemClass[3] { new Market.MarketItemClass(3, 1), new Market.MarketItemClass(3, 2), new Market.MarketItemClass(3, 4) });
        _BuyItemMenu.PushMenu(Market.GetMarketClassName(6, -1), new Market.MarketItemClass[1] {  new Market.MarketItemClass(6, 2) });
        _BuyItemMenu.PushMenu(Market.GetMarketClassName(7, -1), new Market.MarketItemClass[2] { new Market.MarketItemClass(7, 1), new Market.MarketItemClass(7, 2) });
        //_BuyItemMenu.PushMenu(Market.GetMarketClassName(8, -1), new Market.MarketItemClass[4] { new Market.MarketItemClass(8, 1), new Market.MarketItemClass(8, 2), new Market.MarketItemClass(8, 3), new Market.MarketItemClass(8, 4)});
        _BuyItemMenu.PushMenu(Market.GetMarketClassName(9, -1), new Market.MarketItemClass[3] { new Market.MarketItemClass(9, 1), new Market.MarketItemClass(9, 2), new Market.MarketItemClass(9, 3) });

        
    }

    public void ShowFocusPage()
    {
        _BuyItemMenu.ShowDefaultFirst();
    }

    public void UpdateShopInfo()
    {
        if (!_IsShowWatchPanel)
        {
            if (_ItemListPage.gameObject.activeSelf)
            {
                _ItemListPage.RefreshItems();
                _ItemListPage.UpdateWatchBtn();
            }
        }
        else
        {
            if (Market.WatchItems.Count > 0)
            {
                _ItemListPage.gameObject.SetActive(true);
                _ItemListPage.UpdateWatchItems();
                _NoneWatchPanel.SetActive(false);
            }
            else
            {
                _ItemListPage.gameObject.SetActive(false);
                _ItemListPage.UpdateWatchItems();
                _NoneWatchPanel.SetActive(true);
            }
        }
        
    }

    public void UpdatePage()
    {
        _OwnMoney.ShowOwnCurrency(MONEYTYPE.MONEYTYPE_COIN);

        StartCoroutine(UpdateMenu());
    }

    private IEnumerator UpdateMenu()
    {
        yield return new WaitForEndOfFrame();
        if(_SelectedPage==null)
            _BuyItemMenu.ShowDefaultFirst();
    }

    public void UpdateMoney()
    {
        _OwnMoney.ShowOwnCurrency(MONEYTYPE.MONEYTYPE_COIN);
    }

    public void OnMenuSelect(Market.MarketItemClass selectedPage)
    {
        if (selectedPage == null)
            return;

        foreach (var menuObj in _BuyItemMenu.SubBtns)
        {
            if (menuObj.Value.Count > 0)
            {
                foreach (var menuSubObj in menuObj.Value)
                {
                    Market.MarketItemClass marketClass = menuSubObj.MenuObj as Market.MarketItemClass;
                    if (marketClass.ItemClass == selectedPage.ItemClass && marketClass.ItemSubClass == selectedPage.ItemSubClass)
                    {
                        _BuyItemMenu.ShowMenu(menuObj.Key.MenuObj, menuSubObj.MenuObj);
                        _SelectedPage = marketClass;
                    }
                }
            }
            else
            {
                Market.MarketItemClass marketClass = menuObj.Key.MenuObj as Market.MarketItemClass;
                if (marketClass.ItemClass == selectedPage.ItemClass && marketClass.ItemSubClass == selectedPage.ItemSubClass)
                {
                    _BuyItemMenu.ShowMenu(menuObj.Key.MenuObj);
                    _SelectedPage = marketClass;
                }
            }

        }
    }

    public void OnMenu(object menuObj)
    {
        _BtnFind.UnSelected();
        var selectedPage = menuObj as Market.MarketItemClass;
        if (selectedPage == null)
            return;

        _SelectedPage = selectedPage;

        _IsShowWatchPanel = false;
        _NoneWatchPanel.SetActive(false);
        if (_SelectedPage.ItemClass == 999)//关注
        {
            _IsShowWatchPanel = true;
            OnShowWatch();
        }
        
        else if (_SelectedPage.ItemClass == 1)
        {
            if (_SelectedPage.ItemSubClass == 1)
            {
                ShowEquipFilter(0);
            }
            else if (_SelectedPage.ItemSubClass == 2)
            {
                ShowEquipFilter(2);
            }
            else if (_SelectedPage.ItemSubClass == 3)
            {
                ShowEquipFilter(1);
            }
        }
        else
        {
            ShowItemClass();
        }
    }

    public void OnShowWatch()
    {
        _FindPage.gameObject.SetActive(false);
        _EquipFilterPaeg.gameObject.SetActive(false);
        _ItemClassPage.gameObject.SetActive(false);
        _ItemListPage.gameObject.SetActive(false);
        _NoneWatchPanel.SetActive(true);

        CG_REQ_USER_SHOP_FOCUS_ITEMS packet = (CG_REQ_USER_SHOP_FOCUS_ITEMS)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_USER_SHOP_FOCUS_ITEMS);
        packet.SetState((int)CG_REQ_USER_SHOP_FOCUS_ITEMS.EUserShopFocusState.EFocusItemOnSale);
        packet.SendPacket();
    }

    public void OnBtnFind()
    {
        _BtnFind.Selected();
        _BuyItemMenu.ClearSelect(1);
        _IsShowWatchPanel = false;
        _NoneWatchPanel.SetActive(false);
        _FindPage.gameObject.SetActive(true);
        _EquipFilterPaeg.gameObject.SetActive(false);
        _ItemClassPage.gameObject.SetActive(false);
        _ItemListPage.gameObject.SetActive(false);
    }

    private void ShowEquipFilter(int filterType)
    {
        _FindPage.gameObject.SetActive(false);
        _EquipFilterPaeg.gameObject.SetActive(true);
        _ItemClassPage.gameObject.SetActive(false);
        _ItemListPage.gameObject.SetActive(false);
        _NoneWatchPanel.SetActive(false);

        _EquipFilterPaeg.SetEquipFilter(filterType);
    }

    private void ShowItemClass()
    {
        _FindPage.gameObject.SetActive(false);
        _EquipFilterPaeg.gameObject.SetActive(false);
        _ItemClassPage.gameObject.SetActive(true);
        _ItemListPage.gameObject.SetActive(false);
        _NoneWatchPanel.SetActive(false);

        _ItemClassPage.ShowItemClass(_SelectedPage.ItemClass, _SelectedPage.ItemSubClass, false);
    }

    public void ShowItemList(List<int> itemDataID, int itemCnt, int isRare = 2)
    {
        _FindPage.gameObject.SetActive(false);
        _EquipFilterPaeg.gameObject.SetActive(false);
        _ItemClassPage.gameObject.SetActive(false);
        _ItemListPage.gameObject.SetActive(true);
        _NoneWatchPanel.SetActive(false);

        _ItemListPage.ShowItemType(itemDataID, itemCnt, isRare);
    }

    private void ShowLikeItemList()
    {
        _FindPage.gameObject.SetActive(false);
        _EquipFilterPaeg.gameObject.SetActive(false);
        _ItemClassPage.gameObject.SetActive(false);
        _ItemListPage.gameObject.SetActive(true);
        _NoneWatchPanel.SetActive(false);
    }
    #endregion


}