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


public class InventoryPanelController : WarehousePanelController
{
    public void Start()
    {
        AllowToUseItemInPanel = true;
        Type = PanelTypeEnum.Inventory;
    }

    protected override UIBaseManager<IndexValuePair<int, EquippableItem>> FetchUiManager()
    {
        var uiManager = GameObject.FindObjectOfType<InventoryUIManager>();

        // uiManager.SetPanelController(gameObject);  - unnecessary

        return uiManager;
    }


    // 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


    // 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<InventorySlot>());

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

    public override GameObject BuildSlot(int key, GameObject _parent)
    {
        if (ChildBoxTemplate == null)
            throw new Exception("itemslotbox_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<InventorySlot>().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}");
            ChildBoxList[element.Key].SetItem(element.Value);
        }
    }

    public override void SingleLeftMouseClick(ItemSlot itemSlot)
    {
        // mark item as selected in shop panel
        if (ShopContentUIManager.Instance.DynamicPanel)
            ShopContentUIManager.Instance.DynamicPanel.transform.Find("ItemDetails").GetComponent<ShopItemCardKeeper>().ShowItemDetails(itemSlot, ShopItemCardMode.Sell);
    }
}