using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Attribute : ScriptableObject
{
    public long Base { get; set; }
    public long BaseBonus { get; set; }
    public long PermyriadBonus { get; set; }
    public long FlatBonus { get; set; }
    public long Value => Calc(Base, BaseBonus, PermyriadBonus, FlatBonus);
    /// 
    /// Calculates the stat value with accumulated buff and debuff modifiers.
    /// 
    /// Base value.
    /// Additive bonus applied before multiplicative scaling.
    /// Multiplicative scaling in hundredths of a percent. E.g., 625 permyriad corresponds to 6.25%.
    /// Additive bonus applied after multiplicative scaling.
    /// (base + baseBonus) * (100% + permyriadBonus) + flatBonus, bounded below by 0.
    public static long Calc(long baseValue, long baseBonus, long permyriadBonus, long flatBonus)
    {
        var r = baseValue + baseBonus;
        var m = permyriadBonus + 10000;
        r = r * (m / 10000) + (r / 10000) * (m % 10000) + flatBonus;
        if (r <= 0)
        {
            return 0;
        }
        return r;
    }
}