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

public class ShopManager : MonoBehaviour
{
    [Header("Связи")]
    [Tooltip("Ссылка на скрипт управления строительством")]
    public FurnitureController builder;     
    
    [Tooltip("Префаб UI-кнопки магазина")]
    public GameObject buttonTemplate;       
    
    [Tooltip("Объект Content, внутри которого лежит Grid Layout Group")]
    public Transform contentPanel;          

    [Header("Каталог мебели")]
    [Tooltip("Список всех карточек товаров (Scriptable Objects)")]
    public List<FurnitureItemSO> items;    

    private void Start()
    {
        GenerateShop();
    }

    public void GenerateShop()
    {
        // 1. Очищаем панель от старых кнопок (полезно при переключении категорий)
        foreach (Transform child in contentPanel)
        {
            Destroy(child.gameObject);
        }

        // 2. Проходимся по каждой карточке в нашем каталоге
        foreach (FurnitureItemSO item in items)
        {
            if (item == null) continue; // Защита от пустых слотов в инспекторе

            // Создаем новую кнопку внутри contentPanel
            GameObject newButton = Instantiate(buttonTemplate, contentPanel);

            // Находим компонент Image на этой кнопке и применяем иконку из SO
            Image btnImage = newButton.GetComponent<Image>();
            if (btnImage != null && item.catalogIcon != null)
            {
                btnImage.sprite = item.catalogIcon;
            }

            // Настраиваем действие при нажатии на кнопку
            Button btn = newButton.GetComponent<Button>();
            if (btn != null)
            {
                // Важно: создаем локальную переменную для передачи в событие (замыкание)
                FurnitureItemSO itemToSelect = item; 
                
                // При клике передаем нашу карточку товара прямо в контроллер строительства
                btn.onClick.AddListener(() => 
                {
                    builder.SelectFurnitureAndCloseShop(itemToSelect);
                });
            }
        }
    }
    // ==========================================
    // МАГИЯ ДЛЯ АВТО-ЗАПОЛНЕНИЯ СПИСКА
    // ==========================================
    
    // Этот атрибут создает кнопку в контекстном меню скрипта
    [ContextMenu("Найти всю мебель в проекте")]
    private void FindAllFurnitureInProject()
    {
// Этот код выполняется ТОЛЬКО в редакторе Unity, в саму игру на телефон он не попадет
#if UNITY_EDITOR
        // 1. Очищаем старый список
        items.Clear();

        // 2. Ищем ВСЕ файлы типа FurnitureItemSO во всех папках проекта
        string[] guids = UnityEditor.AssetDatabase.FindAssets("t:FurnitureItemSO");

        foreach (string guid in guids)
        {
            // Узнаем путь к файлу
            string path = UnityEditor.AssetDatabase.GUIDToAssetPath(guid);
            
            // Загружаем файл и добавляем в список
            FurnitureItemSO item = UnityEditor.AssetDatabase.LoadAssetAtPath<FurnitureItemSO>(path);
            if (item != null)
            {
                items.Add(item);
            }
        }

        // 3. Говорим Unity сохранить изменения в скрипте (чтобы список не сбросился)
        UnityEditor.EditorUtility.SetDirty(this);
        
        Debug.Log($"<color=green>Автоматически найдено и добавлено предметов: {items.Count}</color>");
#endif
    }
}