sea-battle/Assets/Scripts/UI/AdminContactsController.cs
2026-01-09 08:45:22 +03:00

168 lines
6.4 KiB
C#

using TMPro;
using UnityEngine;
namespace UI
{
/// <summary>
/// Óïðàâëÿåò òîëüêî TextMeshPro òåêñòîì ñ êîíòàêòàìè àäìèíèñòðàöèè.
/// Ïîäïèñûâàåòñÿ íà èçìåíåíèÿ íàñòðîåê è îáíîâëÿåò òåêñò, áåðÿ íîìåð èç PlayerPrefs ïî êëþ÷ó `telephone_number`.
/// </summary>
public class AdminContactsController : MonoBehaviour
{
[Tooltip("TextMeshPro òåêñò, êóäà âûâîäÿòñÿ êîíòàêòû àäìèíèñòðàöèè.")]
[SerializeField] private TMP_Text contactsText;
[Tooltip("TextMeshPro òåêñò äëÿ îòîáðàæåíèÿ îøèáîê âûäà÷è ïðèçà.")]
[SerializeField] private TMP_Text errorText;
[Tooltip("TextMeshPro òåêñò äëÿ îòîáðàæåíèÿ ñóïåðïðèçà.")]
[SerializeField] private TMP_Text prizeText;
[Tooltip("Êëþ÷ PlayerPrefs, îòêóäà áåð¸òñÿ íîìåð òåëåôîíà (ïî óìîë÷àíèþ 'telephone_number').")]
[SerializeField] private string telephonePrefKey = "telephone_number";
[Tooltip("Êëþ÷ PlayerPrefs, îòêóäà áåð¸òñÿ íîìåð òåëåôîíà (ïî óìîë÷àíèþ 'telephone_number').")]
[SerializeField] private string prizePrefKey = "SpecialPrize";
[Tooltip("Åñëè true — îáúåêò òåêñòà áóäåò ñêðûâàòüñÿ, êîãäà îïöèÿ âûêëþ÷åíà; èíà÷å òåêñò áóäåò î÷èùàòüñÿ.")]
[SerializeField] private bool hideTextWhenOff = true;
private const string SettingName = "Ïîêàçûâàòü êîíòàêòû àäìèíèñòðàöèè";
private const string ErrorSettingName = "Âûâîä îøèáêè âûäà÷è â ìåíþ";
private const string PrizeSettingName = "Âûâîä èíôîðìàöèè î ñóïåðïðèçå â ìåíþ";
private void OnEnable()
{
if (SettingsManager.instance != null)
SettingsManager.instance.OnSettingsChanged.AddListener(UpdateState);
TextInput.OnTextChanged += UpdateState;
}
private void Start()
{
if (contactsText == null)
contactsText = GetComponent<TMP_Text>();
// Åñëè errorText íå íàçíà÷åí â èíñïåêòîðå, ïûòàåìñÿ íàéòè åãî ñðåäè äî÷åðíèõ TMP-òåêñòâ
if (errorText == null)
{
var tmps = GetComponentsInChildren<TMP_Text>(true);
foreach (var t in tmps)
{
if (t == contactsText) continue;
errorText = t;
break;
}
}
// Ïîäñòðàõîâêà: ïîäïèøåìñÿ òàêæå â Start, åñëè instance ïîÿâèëñÿ ïîçæå
if (SettingsManager.instance != null)
{
SettingsManager.instance.OnSettingsChanged.RemoveListener(UpdateState);
SettingsManager.instance.OnSettingsChanged.AddListener(UpdateState);
}
UpdateState();
}
private void OnDisable()
{
if (SettingsManager.instance != null)
SettingsManager.instance.OnSettingsChanged.RemoveListener(UpdateState);
// Îòïèñûâàåìñÿ îò èçìåíåíèÿ òåêñòà (åñëè ïîäïèñûâàëèñü â OnEnable)
TextInput.OnTextChanged -= UpdateState;
}
private void UpdateState()
{
// Îáíîâëÿåì contactsText íåçàâèñèìî îò errorText
bool contactsShouldShow = GetSettingFlag(SettingName);
if (contactsText != null)
{
if (contactsShouldShow)
{
contactsText.gameObject.SetActive(true);
string phone = PlayerPrefs.GetString(telephonePrefKey, string.Empty);
contactsText.text = string.IsNullOrEmpty(phone) ? "Òåëåôîí íå çàäàí" : $"Òåëåôîí: {phone}";
}
else
{
if (hideTextWhenOff)
contactsText.gameObject.SetActive(false);
else
contactsText.text = string.Empty;
}
}
// Îáíîâëÿåì errorText íåçàâèñèìî îò contactsText
bool showError = GetSettingFlag(ErrorSettingName);
if (errorText != null)
{
if (showError)
{
errorText.gameObject.SetActive(true);
string err = PlayerPrefs.GetString(KeyVault.PRIZING_ERROR_REGISTRED, string.Empty);
if (string.IsNullOrEmpty(err))
{
errorText.text = "Îøèáîê âûäà÷è íå çàôèêñèðîâàíî";
errorText.color = Color.green; // íåò îøèáîê — çåë¸íûé
}
else
{
errorText.text = $"Îøèáêà âûäà÷è {err}";
errorText.color = Color.red; // åñòü îøèáêà — êðàñíûé
}
}
else
{
if (hideTextWhenOff)
errorText.gameObject.SetActive(false);
else
errorText.text = string.Empty;
}
}
bool showPrize = GetSettingFlag(PrizeSettingName);
if (prizeText != null)
{
if (showPrize)
{
prizeText.gameObject.SetActive(true);
string prizeInfo = PlayerPrefs.GetString(prizePrefKey, string.Empty);
prizeText.text = string.IsNullOrEmpty(prizeInfo) ? "Ñóïåðïðèç íå çàäàí" : $"Ñóïåðïðèç: {prizeInfo}";
}
else
{
if (hideTextWhenOff)
prizeText.gameObject.SetActive(false);
else
prizeText.text = string.Empty;
}
}
}
// Óíèâåðñàëüíàÿ ïðîâåðêà áóëåâûõ íàñòðîåê (ó÷èòûâàåò ðàçíûå ïðåäñòàâëåíèÿ true)
private bool GetSettingFlag(string key)
{
if (SettingsManager.instance == null) return false;
string val;
try { val = SettingsManager.instance.GetSettingValue(key); }
catch (System.Exception ex)
{
Debug.LogWarning($"AdminContactsController: îøèáêà ïðè ÷òåíèè íàñòðîéêè '{key}': {ex.Message}");
return false;
}
if (string.IsNullOrEmpty(val)) return false;
val = val.Trim().ToLowerInvariant();
string[] trueValues = new string[] { "âêë", "âêëþ÷åíî", "äà", "true", "on", "enabled", "âêë." };
foreach (var t in trueValues)
if (val.Contains(t)) return true;
return false;
}
}
}