using BrewMonster.Network;
using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace BrewMonster.UI
{
///
/// Numeric input dialog (C++ CDlgInputNO / DlgInputNO). Dialog id: DlgQuantity.
///
public class DlgQuantity : AUIDialog
{
public enum QuantityMode
{
None = 0,
/// Gửi tiền vào kho — C++ INPUTNO_STORAGE_IVTR_MONEY (Win_Inventory choosemoney + storage open).
StorageDepositMoney,
/// Rút tiền ra — C++ INPUTNO_STORAGE_TRASH_MONEY (Win_Storage choosemoney).
StorageWithdrawMoney,
/// Gửi tiền vào kho tài khoản — same C2S as storage, with is_accountbox=1.
AccountStorageDepositMoney,
/// Rút tiền ra từ kho tài khoản — same C2S as storage, with is_accountbox=1.
AccountStorageWithdrawMoney,
}
[Header("Amount")]
[SerializeField] private TMP_InputField amountInput;
[SerializeField] private Text amountTextLegacy;
[Header("Buttons (C++: confirm / IDCANCEL / add / minus / max)")]
[SerializeField] private Button confirmButton;
[SerializeField] private Button cancelButton;
[SerializeField] private Button addButton;
[SerializeField] private Button minusButton;
[SerializeField] private Button maxButton;
private QuantityMode _mode = QuantityMode.None;
private int _min = 1;
private int _max = 1;
private int _current = 1;
private Action _onConfirmed;
public static DlgQuantity GetDialog()
{
return EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan()?.GetDialog("DlgQuantity") as DlgQuantity;
}
/// Open quantity panel; on confirm invokes callback then sends C2S when mode is storage money.
public static void Show(QuantityMode mode, int maxAmount, int defaultAmount = 1, Action onConfirmed = null)
{
var dlg = GetDialog();
if (dlg == null)
{
Debug.LogError("[DlgQuantity] Dialog 'DlgQuantity' not found. Add prefab to DialogScriptTableObject (id DlgQuantity).");
return;
}
CECUIManager.Instance?.ShowDialogOverlay("DlgQuantity");
dlg.Open(mode, maxAmount, defaultAmount, onConfirmed);
}
public override void Awake()
{
base.Awake();
ResolveControls();
WireButtons();
}
void ResolveControls()
{
if (amountInput == null)
{
amountInput = GetComponentInChildren(true);
if (amountInput != null && amountInput.name.Contains("DEFAULT", StringComparison.OrdinalIgnoreCase) == false)
{
var all = GetComponentsInChildren(true);
for (int i = 0; i < all.Length; i++)
{
if (all[i] != null && all[i].name.IndexOf("Txt_No", StringComparison.OrdinalIgnoreCase) >= 0)
{
amountInput = all[i];
break;
}
}
}
}
ResolveButton(ref confirmButton, "confirm", "btn_confirm", "ok");
ResolveButton(ref cancelButton, "cancel", "idcanel", "btn_cancel", "close");
ResolveButton(ref addButton, "add", "btn_add", "incre", "plus");
ResolveButton(ref minusButton, "minus", "btn_minus", "reduce", "decre");
ResolveButton(ref maxButton, "max", "btn_max");
}
void ResolveButton(ref Button field, params string[] nameHints)
{
if (field != null)
return;
var buttons = GetComponentsInChildren