using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;

// T will be type panel: inventory, equipment, chest
abstract public class BaseWarehouseController : MonoBehaviour
{
    [SerializeField] public GameObject _panel;
    [SerializeField] public Dictionary<int, Item> _items = new Dictionary<int, Item>();


    protected GameObject dynamicPanel;
    
    public bool isOpen = false;


    // Create panel instance on scene on special position and passed content (item list)
    public void OpenPanel()
    {
        GameObject globalGUI =  GameObject.FindGameObjectsWithTag("GUI")[0];
        
        if(globalGUI)
        {
            this.dynamicPanel = Instantiate(_panel, _panel.transform.position, Quaternion.identity, globalGUI.transform);   // 4'th arg allow set object as child

            this.dynamicPanel.transform.localPosition = _panel.transform.position;   // prevent overwritten position by... environment???

            this.SetupPanel(); // bind pandel to current chest

            isOpen = true;
        } else {
            Debug.Log("Can't find global GUI object!!!");
        }

    }

    public virtual void ClosePanel()
    {
        Destroy(dynamicPanel);
        isOpen = false;
    }

    public KeyValuePair<int, Item> FindItemInWarehouse(string itemName)
    {
        return this._items.Where(item => item.Value.name == itemName).FirstOrDefault();
    }

    protected abstract void SetupPanel();

    public virtual void SetItemOnPosition(int _keyPosition, Item _item)
    {
        this._items[_keyPosition] = _item;
    }

    public virtual void RemoveItemFromPosition(int _keyPosition)
    {
        this._items.Remove(_keyPosition);
    }
}