// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE

using System;

namespace osu.Game.Beatmaps.ControlPoints
{
    public class ControlPoint : IComparable<ControlPoint>, IEquatable<ControlPoint>
    {
        /// <summary>
        /// The time at which the control point takes effect.
        /// </summary>
        public double Time;

        public int CompareTo(ControlPoint other) => Time.CompareTo(other.Time);

        /// <summary>
        /// Whether this <see cref="ControlPoint"/> provides the same parametric changes as another <see cref="ControlPoint"/>.
        /// Basically an equality check without considering the <see cref="Time"/>.
        /// </summary>
        /// <param name="other">The <see cref="ControlPoint"/> to compare to.</param>
        /// <returns>Whether this <see cref="ControlPoint"/> is equivalent to <paramref name="other"/>.</returns>
        public virtual bool EquivalentTo(ControlPoint other) => true;

        public bool Equals(ControlPoint other)
            => EquivalentTo(other) && Time.Equals(other?.Time);
    }
}