using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
using RR.Game2D.Core.Managers;
namespace RR.Common.UI
{
///
/// Модальное окно витрины с выбором ячейки/полки для выдачи приза.
/// Отображает сетку кнопок-ячеек. Навигация — через Input System (Navigate).
///
public class PrizeStandModal : Modal
{
/// Текущий экземпляр на сцене. Регистрируется автоматически.
public static PrizeStandModal Current { get; private set; }
[Header("Контент")]
[Tooltip("Контейнер для кнопок ячеек (например, GridLayoutGroup).")]
[SerializeField] private Transform boxButtonsContainer;
[Tooltip("Префаб кнопки ячейки. Должен содержать Button и TMP_Text.")]
[SerializeField] private GameObject boxButtonPrefab;
[Header("UI")]
[Tooltip("Текст-заголовок окна (опционально).")]
[SerializeField] private TMP_Text titleText;
[Tooltip("Текст заголовка по умолчанию.")]
[SerializeField] private string defaultTitle = "Выберите ячейку";
[Header("Навигация")]
[Tooltip("InputAction для навигации (Navigate из Input System).")]
[SerializeField] private InputActionReference navigateAction;
///
/// Вызывается при выборе ячейки. Параметр — номер ячейки (1-based).
/// Если игрок закрыл окно без выбора, вызывается с 0.
///
public event Action OnBoxSelected;
private readonly List _createdButtons = new();
private bool _selectionMade;
// ────────────── Lifecycle ──────────────
protected override void Awake()
{
Current = this;
base.Awake();
// При закрытии без выбора — уведомляем с 0
OnClosed += HandleClosedWithoutSelection;
}
private void OnDestroy()
{
if (Current == this) Current = null;
OnClosed -= HandleClosedWithoutSelection;
}
// ────────────── Публичный API ──────────────
///
/// Показывает окно с указанным количеством ячеек.
///
/// Количество ячеек для отображения.
public void Show(int boxCount)
{
_selectionMade = false;
BuildButtons(boxCount);
if (titleText != null)
titleText.text = defaultTitle;
Open();
GameManager.Instance?.SetPause(true);
}
// ────────────── Внутреннее ──────────────
private void BuildButtons(int count)
{
ClearButtons();
if (boxButtonsContainer == null || boxButtonPrefab == null)
{
Debug.LogError("[PrizeStandModal] Контейнер или префаб кнопки не назначены.");
return;
}
for (int i = 1; i <= count; i++)
{
GameObject btnObj = Instantiate(boxButtonPrefab, boxButtonsContainer);
btnObj.name = $"BoxButton_{i}";
// Настраиваем текст
TMP_Text label = btnObj.GetComponentInChildren();
if (label != null)
label.text = i.ToString();
// Настраиваем кнопку
Button btn = btnObj.GetComponent