using Framework.ItemSystem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;

namespace Framework.ItemSystem
{
    /// <summary>
    /// An object that represents a item that can be used by Actors
    /// in the game world, this object does not represent a physical
    /// object but as this interface inherits from <see cref="Prefabable"/>
    /// it should provide a prefab object to be used in the real 
    /// world. 
    /// </summary>
    public interface Itemlike : ItemDefinitionlike
    {
        void SetDefinition(ItemDefinitionlike definition);

        /// <summary>
        /// Returns the owner of this item. 
        /// </summary>
        /// <returns></returns>
        GameObject GetOwner();

        /// <summary>
        /// Sets the owner of this tiem.
        /// </summary>
        /// <param name="owner"></param>
        void SetOwner(GameObject owner);

        /// <summary>
        /// This method should be called when this item leaves 
        /// an inventory. The method is abstract so an extended
        /// implementation of it should be provided.
        /// </summary>
        void LeaveInventory();

        /// <summary>
        /// This method should be called when this item enters
        /// an inventory The method is abstract so an extended 
        /// implementtion of it should be provided.
        /// </summary>
        void EnterInventory();
    }
}
