using System.Globalization;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

namespace MajacloudSdk.Samples.Starter
{
    public sealed class LeaderboardPanel : MonoBehaviour
    {
        [SerializeField] private LeaderboardView view;
        [SerializeField] private TMP_InputField scoreInput;
        [SerializeField] private Button submitButton;

        private void Awake()
        {
            if (submitButton != null) submitButton.onClick.AddListener(Submit);
        }

        public void OnSignedIn()
        {
            if (view != null && view.isActiveAndEnabled) view.Refresh();
        }

        public async void Submit()
        {
            if (!Majacloud.IsInitialized) return;
            if (scoreInput == null || !double.TryParse(scoreInput.text, NumberStyles.Float, CultureInfo.InvariantCulture, out var score))
            {
                StarterController.Toast("Enter a number first.", true);
                return;
            }
            if (submitButton != null) submitButton.interactable = false;
            var result = await Majacloud.Leaderboards.SubmitScoreAsync(StarterController.Instance != null ? StarterController.Instance.LeaderboardSlug : "coins", score);
            if (this == null) return;
            if (submitButton != null) submitButton.interactable = true;
            if (!result.Ok)
            {
                StarterController.Toast(result.Error.Message, true);
                return;
            }
            var entry = result.Value.Entry;
            StarterController.Toast(result.Value.Accepted
                ? "Score accepted" + (entry != null && entry.Rank.HasValue ? " · rank #" + entry.Rank.Value : string.Empty)
                : "Not a new best (your best is " + (entry != null ? entry.Score.ToString("#,0.##", CultureInfo.InvariantCulture) : "?") + ")");
            if (view != null) view.Refresh();
        }
    }
}
