using UnityEngine;
using System.Collections.Generic;

/// <summary>
/// Пример конфигурации предметов
/// </summary>
public class InventoryExampleItems : MonoBehaviour
{
    [Header("Item Database")]
    public List<ItemData> items;

    void Awake()
    {
        // Создаём примеры предметов если база пустая
        if (items == null || items.Count == 0)
        {
            items = CreateExampleItems();
        }

        // Передаём в InventoryManager
        var im = FindObjectOfType<InventoryManager>();
        if (im != null)
        {
            im.itemDatabase = items;
            im.RebuildItemDictionary();

            // Сразу добавляем тестовые предметы
            im.AddItem("stone", 32);
            im.AddItem("dirt", 16);
            im.AddItem("wood", 8);
            im.AddItem("apple", 5);
            im.AddItem("sword", 1);
            im.AddItem("pickaxe", 1);

            Debug.Log("[InventoryExampleItems] Added test items");
        }
    }

    List<ItemData> CreateExampleItems()
    {
        return new List<ItemData>
        {
            CreateItem("stone", "Камень", "Обычный камень", ItemType.Block, 64),
            CreateItem("dirt", "Земля", "Блок земли", ItemType.Block, 64),
            CreateItem("wood", "Дерево", "Деревянный блок", ItemType.Block, 64),
            CreateItem("plank", "Доски", "Деревянные доски", ItemType.Block, 64),
            CreateItem("sword", "Меч", "Острый меч", ItemType.Weapon, 1),
            CreateItem("apple", "Яблоко", "Вкусное яблоко", ItemType.Consumable, 16),
            CreateItem("pickaxe", "Кирка", "Инструмент для добычи", ItemType.Tool, 1),
        };
    }

    ItemData CreateItem(string id, string name, string desc, ItemType type, int stack)
    {
        var item = ScriptableObject.CreateInstance<ItemData>();
        item.id = id;
        item.itemName = name;
        item.description = desc;
        item.type = type;
        item.maxStack = stack;
        item.icon = CreatePlaceholderIcon(name);
        return item;
    }

    Sprite CreatePlaceholderIcon(string text)
    {
        // Создаём текстуру с текстом
        var tex = new Texture2D(64, 64);
        var colors = new Color[64 * 64];

        // Заливаем цветом (серый фон)
        for (int i = 0; i < colors.Length; i++)
        {
            colors[i] = new Color(0.5f, 0.5f, 0.5f, 1f);
        }

        tex.SetPixels(colors);
        tex.Apply();

        // Создаём спрайт
        return Sprite.Create(tex, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
    }
}

/// <summary>
/// Добавляет предметы в инвентарь при старте (для тестирования)
/// </summary>
public class InventoryTester : MonoBehaviour
{
    void Start()
    {
        // Ждём кадр чтобы InventoryManager точно инициализировался
        StartCoroutine(AddTestItems());
    }

    System.Collections.IEnumerator AddTestItems()
    {
        yield return null; // ждём один кадр

        // Добавляем тестовые предметы
        var im = InventoryManager.Instance;
        if (im != null && im.GetItemCount("stone") == 0) // только если пусто
        {
            Debug.Log("[InventoryTester] Adding test items...");
            im.AddItem("stone", 32);
            im.AddItem("dirt", 16);
            im.AddItem("wood", 8);
            im.AddItem("apple", 5);
            im.AddItem("sword", 1);
            im.AddItem("pickaxe", 1);
        }
    }
}