using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
///
/// Контроллер 3-й страницы правил.
/// При активации страницы читает призы боссов из PrizeSerializer
/// и показывает/скрывает блок приза для каждого босса.
///
/// Структура одного слота в инспекторе:
/// BossSlot:
/// prizeContainer — GameObject с картинкой «путь к призу» + картинкой самого приза
/// prizeImage — Image внутри prizeContainer, куда подставляется спрайт приза
///
/// Маппинг PrizeType → Sprite задаётся массивом prizeSprites.
///
public class BossesPageController : MonoBehaviour
{
// ─── Маппинг PrizeType → Sprite ──────────────────────────────
[Serializable]
public class PrizeEntry
{
public PrizeType type;
public Sprite sprite;
[Tooltip("Отображаемое имя типа приза (например «Жетоны»)")]
public string displayName;
}
[Header("Маппинг: тип приза → спрайт")]
[SerializeField] private PrizeEntry[] prizeSprites;
// ─── Слоты боссов ─────────────────────────────────────────────
[Serializable]
public class BossSlot
{
[Tooltip("Корневой GO блока приза (картинка пути + картинка приза)")]
public GameObject prizeContainer;
[Tooltip("Image внутри prizeContainer, куда подставляется спрайт приза")]
public Image prizeImage;
[Tooltip("TMP_Text: тип приза и количество (если > 1)")]
public TMP_Text prizeLabel;
}
[Header("Слоты боссов (порядок = индекс в PrizeSerializer, 0..4)")]
[SerializeField] private BossSlot[] bossSlots;
// ─── Unity ────────────────────────────────────────────────────
private void OnEnable()
{
Refresh();
}
// ─── Logic ────────────────────────────────────────────────────
private void Refresh()
{
List prizes = PrizeSerializer.GetPrizes();
for (int i = 0; i < bossSlots.Length; i++)
{
BossSlot slot = bossSlots[i];
if (slot == null || slot.prizeContainer == null) continue;
bool hasPrize = i < prizes.Count && prizes[i].PrizeType != PrizeType.None;
slot.prizeContainer.SetActive(hasPrize);
if (hasPrize)
{
Prize prize = prizes[i];
if (slot.prizeImage != null)
slot.prizeImage.sprite = FindSprite(prize.PrizeType);
if (slot.prizeLabel != null)
slot.prizeLabel.text = BuildLabel(prize);
}
}
}
///
/// «Жетоны x5» если количество > 1, иначе просто «Жетоны».
///
private string BuildLabel(Prize prize)
{
PrizeEntry entry = FindEntry(prize.PrizeType);
string label = entry != null && !string.IsNullOrWhiteSpace(entry.displayName)
? entry.displayName
: prize.PrizeType.ToString();
return prize.Amount > 1 ? $"{label} x{prize.Amount}" : label;
}
private Sprite FindSprite(PrizeType type) => FindEntry(type)?.sprite;
private PrizeEntry FindEntry(PrizeType type)
{
if (prizeSprites == null) return null;
foreach (var e in prizeSprites)
if (e.type == type) return e;
return null;
}
}