#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// Автоматически настраивает всю систему инвентаря на сцене
/// Добавить на пустой GameObject "GameManager" в сцене
/// </summary>
public class InventorySetup : MonoBehaviour
{
    [Header("Настройки")]
    public bool createUI = true;
    public bool createManagers = true;

    void Awake()
    {
        // Не создаём если уже есть на сцене (после ручной настройки)
        if (FindObjectOfType<InventoryManager>() != null)
        {
            Debug.Log("[InventorySetup] Inventory already exists, skipping creation");
            return;
        }

        if (createManagers)
            SetupManagers();

        if (createUI)
            SetupUI();
    }

    void SetupManagers()
    {
        var imGO = new GameObject("InventoryManager");
        imGO.transform.SetParent(transform);
        imGO.AddComponent<InventoryManager>();

        var itemsGO = new GameObject("InventoryItems");
        itemsGO.transform.SetParent(transform);
        itemsGO.AddComponent<InventoryExampleItems>();

        var testerGO = new GameObject("InventoryTester");
        testerGO.transform.SetParent(transform);
        testerGO.AddComponent<InventoryTester>();

        Debug.Log("[InventorySetup] Managers created");
    }

    void SetupUI()
    {
        var canvasGO = new GameObject("InventoryCanvas");
        canvasGO.transform.SetParent(transform);

        var canvas = canvasGO.AddComponent<Canvas>();
        canvas.renderMode = RenderMode.ScreenSpaceOverlay;
        canvas.sortingOrder = 100;
        canvasGO.AddComponent<GraphicRaycaster>();

        canvasGO.AddComponent<InventoryUIBuilder>();

        Debug.Log("[InventorySetup] UI created");
    }
}

#if UNITY_EDITOR
/// <summary>
/// Кнопка в инспекторе для быстрой настройки сцены
/// </summary>
[CustomEditor(typeof(InventorySetup))]
public class InventorySetupEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        if (GUILayout.Button("Настроить сцену для инвентаря"))
        {
            var target = (InventorySetup)this.target;

            if (FindObjectOfType<InventoryManager>() == null)
            {
                target.createManagers = true;
                target.createUI = true;
                Debug.Log("Инвентарь будет настроен при запуске");
            }
            else
            {
                Debug.LogWarning("InventoryManager уже существует на сцене!");
            }
        }

        GUILayout.Space(10);

        if (GUILayout.Button("Открыть сцену в Unity"))
        {
            EditorApplication.ExecuteMenuItem("Window/General/Scene");
        }
    }
}
#endif