// 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 NUnit.Framework;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Screens.Edit.Components;
using osuTK;

namespace osu.Game.Tests.Visual.Editor
{
    [TestFixture]
    public class TestSceneEditorClock : EditorClockTestScene
    {
        public TestSceneEditorClock()
        {
            Add(new FillFlowContainer
            {
                RelativeSizeAxes = Axes.Both,
                Children = new Drawable[]
                {
                    new TimeInfoContainer
                    {
                        Anchor = Anchor.Centre,
                        Origin = Anchor.Centre,
                        Size = new Vector2(200, 100)
                    },
                    new PlaybackControl
                    {
                        Anchor = Anchor.Centre,
                        Origin = Anchor.Centre,
                        Size = new Vector2(200, 100)
                    }
                }
            });
        }

        [Test]
        public void TestStopAtTrackEnd()
        {
            AddStep("Reset clock", () => Clock.Seek(0));
            AddStep("Start clock", Clock.Start);
            AddAssert("Clock running", () => Clock.IsRunning);
            AddStep("Seek near end", () => Clock.Seek(Clock.TrackLength - 250));
            AddUntilStep("Clock stops", () => !Clock.IsRunning);
            AddAssert("Clock stopped at end", () => Clock.CurrentTime == Clock.TrackLength);
            AddStep("Start clock again", Clock.Start);
            AddAssert("Clock looped", () => Clock.IsRunning && Clock.CurrentTime < Clock.TrackLength);
        }
    }
}