// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Timing;
using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Graphics.Containers;

namespace osu.Game.Beatmaps
{
    /// <summary>
    /// Provides various data sources which allow for synchronising visuals to a known beat.
    /// Primarily intended for use with <see cref="BeatSyncedContainer"/>.
    /// </summary>
    [Cached]
    public interface IBeatSyncProvider : IHasAmplitudes
    {
        /// <summary>
        /// Access any available control points from a beatmap providing beat sync. If <c>null</c>, no current provider is available.
        /// </summary>
        ControlPointInfo? ControlPoints { get; }

        /// <summary>
        /// Access a clock currently responsible for providing beat sync. If <c>null</c>, no current provider is available.
        /// </summary>
        IClock? Clock { get; }
    }
}