using System;
using UnityEngine;

namespace YachtDice.Economy
{
    public class CurrencyBank : MonoBehaviour
    {
        [SerializeField] private int startingBalance = 500;

        private int balance;

        public int Balance => balance;

        public event Action<int> OnBalanceChanged;

        private void Awake()
        {
            balance = startingBalance;
        }

        public void Add(int amount)
        {
            if (amount <= 0) return;

            balance += amount;
            OnBalanceChanged?.Invoke(balance);
        }

        public bool Spend(int amount)
        {
            if (amount <= 0) return false;
            if (balance < amount) return false;

            balance -= amount;
            OnBalanceChanged?.Invoke(balance);
            return true;
        }

        public bool CanAfford(int amount) => balance >= amount;

        public void SetBalance(int value)
        {
            balance = Mathf.Max(0, value);
            OnBalanceChanged?.Invoke(balance);
        }
    }
}
