using System.Globalization;
using System.Xml.Linq;

namespace Barotrauma.Items.Components
{
    class ExponentiationComponent : ItemComponent
    {
        private float exponent;
        [InGameEditable, Serialize(1.0f, IsPropertySaveable.No, description: "The exponent of the operation.", alwaysUseInstanceValues: true)]
        public float Exponent
        {
            get
            {
                return exponent;
            }
            set
            {
                exponent = value;
            }
        }

        public ExponentiationComponent(Item item, ContentXElement element)
            : base(item, element)
        {
            IsActive = true;
        }

        public override void ReceiveSignal(Signal signal, Connection connection)
        {
            switch (connection.Name)
            {
                case "set_exponent":
                case "exponent":
                    float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out exponent);
                    break;
                case "signal_in":
                    float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out float value);
                    signal.value = MathUtils.Pow(value, Exponent).ToString("G", CultureInfo.InvariantCulture);
                    item.SendSignal(signal, "signal_out");
                    break;
            }
        }
    }
}