using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using CurrencyManager;
using static CurrencyManager.Wallet;

namespace CurrencyManager
{
    public class TransactionHistoryUI : MonoBehaviour
    {
        [SerializeField] private Text transactionText;

        private Wallet wallet;

        private void Awake()
        {
            wallet = Instance;
        }

        private void OnEnable()
        {
            wallet.OnTransactionAdded += UpdateTransactionHistory;
        }

        private void OnDisable()
        {
            wallet.OnTransactionAdded -= UpdateTransactionHistory;
        }

        private void Start()
        {
            UpdateTransactionHistory();
        }

        private void UpdateTransactionHistory(Transaction transaction = null)
        {
            List<Transaction> transactions = wallet.TransactionHistory;

            if (transactions.Count == 0)
            {
                transactionText.text = "No transactions yet.";
                return;
            }

            string transactionHistory = "Transaction History:\n";

            foreach (Transaction t in transactions)
            {
                string transactionTypeString = "";

                switch (t.type)
                {
                    case Transaction.TransactionType.Add:
                        transactionTypeString = "Added";
                        break;
                    case Transaction.TransactionType.Subtract:
                        transactionTypeString = "Subtracted";
                        break;
                    case Transaction.TransactionType.Exchange:
                        transactionTypeString = "Exchanged";
                        break;
                }

                transactionHistory += $"{t.date.ToShortDateString()} {t.date.ToShortTimeString()}: {transactionTypeString} ";

                if (t.fromCurrency != null && t.fromCurrency.Count > 0)
                    foreach (CurrencyAmount currencyAmount in t.fromCurrency)
                    {
                        transactionHistory += $"{currencyAmount.amount} {currencyAmount.currency.name} -> ";
                    }

                if (t.toCurrency != null && t.toCurrency.Count > 0)
                    foreach (CurrencyAmount currencyAmount in t.toCurrency)
                    {
                        transactionHistory += $"{currencyAmount.amount} {currencyAmount.currency.name} ";
                    }

                transactionHistory += "\n";
            }

            transactionText.text = transactionHistory;
        }
    } 
}
