using RobocraftX.Blocks;
using RobocraftX.Common;
using Svelto.ECS;

namespace GamecraftModdingAPI.Blocks
{
    public class DampedSpring : Block
    {
        public DampedSpring(EGID id) : base(id)
        {
        }

        public DampedSpring(uint id) : base(new EGID(id, CommonExclusiveGroups.DAMPEDSPRING_BLOCK_GROUP))
        {
        }

        /// <summary>
        /// The spring's maximum force. This is known as Stiffness in-game
        /// </summary>
        public float MaxForce
        {
            get => BlockEngine.GetBlockInfo(this, (DampedSpringReadOnlyStruct dsrs) => dsrs.maxForce);

            set => BlockEngine.SetBlockInfo(this,
                (ref DampedSpringReadOnlyStruct dsrs, float val) => dsrs.maxForce = val, value);
        }

        /// <summary>
        /// Alias of MaxForce.
        /// </summary>
        public float Stiffness
        {
            get => MaxForce;
            set => MaxForce = value;
        }

        /// <summary>
        /// The spring's maximum damping force.
        /// </summary>
        public float Damping
        {
            get => BlockEngine.GetBlockInfo(this, (LinearJointForcesReadOnlyStruct ljf) => ljf.dampingForceMagnitude);

            set => BlockEngine.SetBlockInfo(this,
                (ref LinearJointForcesReadOnlyStruct ljf, float val) => ljf.dampingForceMagnitude = val, value);
        }
    }
}