using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;


public class ChestPanelController : WarehousePanelController
{

    protected override UIBaseManager<IndexValuePair<int, EquippableItem>> FetchUiManager() 
    {
        return GameObject.FindObjectOfType<ChestContentUIManager>();
    }

    // build panel sunction
    // - setup - main function to build panel on screen
    // - setPanelISlots - build slots on panel dependiong on declared amount
    // - setPanelItems - invoking building items on slots 

    // api for drag and drop
    // - set item on position
    // - remove item from position
    // - find item in warehouse

    private void Start()
    {
        AllowToUseItemInPanel = false;

        Type = PanelTypeEnum.Chest;
    }

    // 1. Prepare empty panel 
    public override void BuildPanelSlots()
    {
        if (_panelContent == null)
            throw new Exception("Panel content is not attaches");


        for (int _position = 0; _position < UiManager.SLOTS_NUMBER; _position++)
        {
            //ISlot newSlot = SetupSlot(_position, _panel);
            GameObject newSlot = BuildSlot(_position, _panelContent);

            // Set new Slot instance
            ChildBoxList.Add(newSlot.GetComponent<ChestSlot>());

            // Assign events
            ChildBoxList[_position] = SetupDragAndDropToSlot(ChildBoxList[_position]);
        }
    }

    public override GameObject BuildSlot(int key, GameObject _parent)
    {
        if (ChildBoxTemplate == null)
            throw new Exception("chestslotbox_template is empty");

        GameObject _newItemSlot = MonoBehaviour.Instantiate(ChildBoxTemplate, _parent.transform.position, Quaternion.identity); //.GetComponent<InventorySlot>();

        _newItemSlot.transform.SetParent(_parent.transform);
        _newItemSlot.transform.localScale = new Vector3(1.15f, 1.15f, 1.15f);

        _newItemSlot.GetComponent<ChestSlot>().SetupSlot(key, null, this);

        return _newItemSlot;
    }


    // 2. Set up panel additn items to it
    public override void SetUp(List<IndexValuePair<int, EquippableItem>> elements)
    {
        // Build panel content template
        BuildPanelSlots();

        // Fill with items
        BuildPanelContent(elements);
    }


    public override void BuildPanelContent(List<IndexValuePair<int, EquippableItem>> elements)
    {

        base.BuildPanelContent(elements);

/*        Debug.Log("Build content");
*/        foreach (IndexValuePair<int, EquippableItem> element in elements)
        {
/*            Debug.Log($"key: {element.Key} - value: {element.Value} - type: {element.Value.EquipmentType}");
*/            ChildBoxList[element.Key].SetItem(new EquippableItem(element.Value));
        }
    }
}


//Chest content manager
// gest new elements list after open chest
// remove: -> remove from list, (binding) update list in chest