Player/Clover/CloverBalanceController.cs
namespace Clover.Player.Clover;

public class CloverBalanceController : Component
{
	[Property, Sync, ReadOnly] private int Clovers { get; set; }

	private List<string> Transactions { get; set; } = new List<string>();
	public static readonly int StartingClovers = 100;

	internal void SetClovers( int clovers )
	{
		Clovers = clovers;
	}
	
	internal void SetStartingClovers()
	{
		Clovers = StartingClovers;
	}

	public bool DeductClover( int deductAmount, string deductMessage = "" )
	{
		if ( Clovers - deductAmount < 0 )
		{
			return false;
		}

		Clovers -= deductAmount;
		LogTransaction( deductAmount, deductMessage, TransactionLogType.Deducted );

		return true;
	}

	public void AddClover( int addAmount, string addMessage = "" )
	{
		Clovers += addAmount;
		LogTransaction( addAmount, addMessage, TransactionLogType.Added );
	}

	public int GetBalance()
	{
		return Clovers;
	}

	private void LogTransaction( int amount, string transactionMessage, TransactionLogType transactionLogType )
	{
		var logMessage =
			$"{amount} {transactionLogType.ToString().ToLower()}";

		if ( !string.IsNullOrEmpty( transactionMessage ) )
		{
			logMessage += $" | Transaction: {transactionMessage}";
		}

		Transactions.Add( logMessage );
	}

	private enum TransactionLogType
	{
		Deducted,
		Added,
	}
}