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

[System.Serializable]
[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Items")]
public class Item : ScriptableObject
{
    public int id;
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public string description;
    public string Description
    {
        get { return description; }
        set { description = value; }
    }

    public int level;
    public int Level
    {
        get { return level; }
        set { level = value; }
    }

    public int value;
    public int Value
    {
        get { return value; }
        set { this.value = value; }
    }

    public Sprite image;
    public Sprite Image
    {
        get { return image; }
        set { image = value; }
    }

    // to handle object created on scene for example after removing from inventory
    public GameObject itemModel;
    public GameObject ItemModel
    {
        get { return itemModel; }
        set { itemModel = value; }
    }

    public int price;
    public int Price
    {
        get { return price; }
        set { price = value; }
    }


    public UnityEvent useEffect = new UnityEvent();
    public Item() {}
    
    public Item(Item _item)
    {
        this.Name = _item.Name;
        this.Description = _item.Description;
        this.Level = _item.Level;
        this.Value = _item.Value;
        this.Price = _item.price;
        this.ItemModel = _item.ItemModel;
        this.Image = _item.Image;
    }

    public Item(string _name, string _description, int _level, int _value, GameObject _itemModel, Sprite _image)
    {
        this.Name = _name;
        this.Description = _description;
        this.Level = _level;
        this.Value = _value;
        this.ItemModel = _itemModel;
        this.Image = _image;
    }

    public Item(string _name, string _description, int _level, int _value, int _price, GameObject _itemModel, Sprite _image)
    {
        this.Name = _name;
        this.Description = _description;
        this.Level = _level;
        this.Value = _value;
        this.Price = _price;
        this.ItemModel = _itemModel;
        this.Image = _image;
    }


    public void InvokeEffectAction()
    {
        Debug.Log($"Use {name} effect");
        useEffect.Invoke();
    }

    public void InvokeEffectAction(int slotNumber)
    {
        Debug.Log($"Use {name} effect");
        useEffect.Invoke();
    }
}