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

public abstract class UISlotPanelManager<T> : UIBaseManager<T>
{
    public virtual int SLOTS_NUMBER => 0;

    /// <summary>
    /// Function to find item in warehouser by its id, returns list of all slots where item occured
    /// </summary>
    /// <param name="itemId"></param>
    /// <returns></returns>
    public abstract List<T> FindItemInWarehouse(int itemId);

    /// <summary>
    /// Function to find item in warehouser by its name, returns list of all slots where item occured
    /// </summary>
    /// <param name="itemId"></param>
    /// <returns></returns>
    public abstract List<T> FindItemInWarehouseByName(string itemName);


    public abstract void RemoveByPosition(int keyPosition);

    public abstract int RemoveByItemId(int itemId);

    public abstract int RemoveByItemName(string itemName);

    public virtual void RemoveAll()
    {
        Elements.Clear();
    }

    public bool IsFull()
    {
        return Elements.Count() == SLOTS_NUMBER;
    }

    protected bool CheckIfSlotIsInRange(int slotNumber)
    {
        return slotNumber < SLOTS_NUMBER;
    }

    protected abstract bool CheckIfSlotExists(int slotNumber);

    /// <summary>
    /// Check if slot is empty in local list
    /// </summary>
    /// <returns></returns>
    protected abstract bool CheckIfPositionIsEmpty(int slotNumber);
}