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

namespace MajacloudSdk.Samples.Starter
{
    public sealed class RewardsPanel : MonoBehaviour
    {
        [SerializeField] private DailyRewardButton rewardButton;
        [SerializeField] private TMP_Text walletLabel;
        [SerializeField] private Button refreshButton;
        [SerializeField] private TMP_Text statusLabel;

        /// <summary>Raised with the new coin balance after a claim or wallet refresh.</summary>
        public event Action<double> CoinsChanged;

        private void Awake()
        {
            if (refreshButton != null) refreshButton.onClick.AddListener(RefreshWallet);
            if (rewardButton != null) rewardButton.Claimed += claim =>
            {
                if (walletLabel != null) walletLabel.text = "Coins: " + claim.Balance.ToString("#,0.##", CultureInfo.InvariantCulture);
                CoinsChanged?.Invoke(claim.Balance);
            };
        }

        private void OnEnable()
        {
            if (Majacloud.IsInitialized && Majacloud.Auth.IsSignedIn) RefreshWallet();
        }

        public void OnSignedIn()
        {
            if (rewardButton != null) rewardButton.RefreshState();
            if (isActiveAndEnabled) RefreshWallet();
        }

        public async void RefreshWallet()
        {
            if (!Majacloud.IsInitialized) return;
            var wallet = await Majacloud.Rewards.GetWalletAsync();
            if (this == null) return;
            if (!wallet.Ok)
            {
                if (statusLabel != null) statusLabel.text = wallet.Error.Message;
                return;
            }
            if (walletLabel != null) walletLabel.text = "Coins: " + wallet.Value.Coins.ToString("#,0.##", CultureInfo.InvariantCulture);
            CoinsChanged?.Invoke(wallet.Value.Coins);
        }
    }
}
