using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;
using GCGame.Table;
using Games.Events;

public class SceneItemUseTip : MonoBehaviour {

    public SceneItemUseChild ItemObj;

    private static SceneItemUseTip m_Instance;
    public static SceneItemUseTip Instance()
    {
        return m_Instance;
    }

    private void Awake()
    {
        m_Instance = this;

    }

    private void OnDestory()
    {
        m_Instance = null;
    }
    List<SceneItemUseChild> _Show_ItemGameObjs = new List<SceneItemUseChild>();
    List<SceneItemUseChild> _Hide_ItemGameObjs = new List<SceneItemUseChild>();

    public void ShowSceneItems()
    {
        for(int i=0;i< _Show_ItemGameObjs.Count;i++)
        {
            _Show_ItemGameObjs[i].gameObject.SetActive(false);
        }
        _Hide_ItemGameObjs.AddRange(_Show_ItemGameObjs);
        _Show_ItemGameObjs.Clear();
        Tab_Fuben fuben = WorldBossData.Instance.GetFubenInfo();
        if (fuben == null)
            return;
        WorldBossData.Instance.InitSceneBossList();
        Dictionary<int, Tab_SceneItemUse> tab_SceneItemUses = TableManager.GetSceneItemUse();
        foreach(var sceneItem in tab_SceneItemUses)
        {
            if (sceneItem.Value.FubenScript != fuben.ScriptID)
                continue;
            Tab_CommonItem commonItem = TableManager.GetCommonItemByID(sceneItem.Value.Id, 0);
            if (commonItem == null)
                continue;
            Games.Item.GameItem gameItem = GameManager.gameManager.PlayerDataPool.BackPack.GetItemByDataID(commonItem.Id);
            ShowSceneItem(gameItem);
        }

    }

    private bool ShowSceneItem(Games.Item.GameItem gameItem)
    {
        if (gameItem == null || gameItem.IsValid() == false)
            return false;
        SceneItemUseChild newObj = null;
        if(_Hide_ItemGameObjs.Count > 0)
        {
            newObj = _Hide_ItemGameObjs[0];
            _Hide_ItemGameObjs.RemoveAt(0);
        }
        else
        {
            newObj = GameObject.Instantiate<SceneItemUseChild>(ItemObj);
            newObj.transform.SetParent(ItemObj.transform.parent);
            newObj.transform.localPosition = Vector3.zero;
            newObj.transform.localScale = Vector3.one;
        }
        if (newObj != null)
        {
            if (newObj.Show(gameItem))
                _Show_ItemGameObjs.Add(newObj);
            else
                _Hide_ItemGameObjs.Add(newObj);
        }
        return true;
    }
}