// 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.

#nullable disable

using System;
using System.Linq;
using Newtonsoft.Json;

namespace osu.Game.Online.API.Requests.Responses
{
    public class APIKudosuHistory
    {
        [JsonProperty("created_at")]
        public DateTimeOffset CreatedAt;

        [JsonProperty("amount")]
        public int Amount;

        [JsonProperty("post")]
        public ModdingPost Post;

        public class ModdingPost
        {
            [JsonProperty("url")]
            public string Url;

            [JsonProperty("title")]
            public string Title;
        }

        [JsonProperty("giver")]
        public KudosuGiver Giver;

        public class KudosuGiver
        {
            [JsonProperty("url")]
            public string Url;

            [JsonProperty("username")]
            public string Username;
        }

        public KudosuSource Source;

        public KudosuAction Action;

        [JsonProperty("action")]
        private string action
        {
            set
            {
                // incoming action may contain a prefix. if it doesn't, it's a legacy forum event.

                string[] split = value.Split('.');

                if (split.Length > 1)
                    Enum.TryParse(split.First().Replace("_", ""), true, out Source);
                else
                    Source = KudosuSource.Forum;

                Enum.TryParse(split.Last(), true, out Action);
            }
        }
    }

    public enum KudosuSource
    {
        Unknown,
        AllowKudosu,
        Delete,
        DenyKudosu,
        Forum,
        Recalculate,
        Restore,
        Vote
    }

    public enum KudosuAction
    {
        Give,
        Reset,
        Revoke,
    }
}