// 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 System.Collections.Generic;
using Newtonsoft.Json;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Game.Online.API;
using osu.Game.Online.Multiplayer;
using osu.Game.Screens.Multi.Match.Components;
using osu.Game.Users;
using osuTK;

namespace osu.Game.Tests.Visual.Multiplayer
{
    public class TestSceneMatchLeaderboard : MultiplayerTestScene
    {
        protected override bool UseOnlineAPI => true;

        public TestSceneMatchLeaderboard()
        {
            Room = new Room { RoomID = { Value = 3 } };

            Add(new MatchLeaderboard
            {
                Origin = Anchor.Centre,
                Anchor = Anchor.Centre,
                Size = new Vector2(550f, 450f),
                Scope = MatchLeaderboardScope.Overall,
            });
        }

        [BackgroundDependencyLoader]
        private void load(IAPIProvider api)
        {
            var req = new GetRoomScoresRequest();
            req.Success += v => { };
            req.Failure += _ => { };

            api.Queue(req);
        }

        private class GetRoomScoresRequest : APIRequest<List<RoomScore>>
        {
            protected override string Target => "rooms/3/leaderboard";
        }

        private class RoomScore
        {
            [JsonProperty("user")]
            public User User { get; set; }

            [JsonProperty("accuracy")]
            public double Accuracy { get; set; }

            [JsonProperty("total_score")]
            public int TotalScore { get; set; }

            [JsonProperty("pp")]
            public double PP { get; set; }

            [JsonProperty("attempts")]
            public int TotalAttempts { get; set; }

            [JsonProperty("completed")]
            public int CompletedAttempts { get; set; }
        }
    }
}