using System.Text.RegularExpressions;
using UnityEngine.Networking;

namespace MajacloudSdk.Internal
{
    /// <summary>Every API path in one place.</summary>
    internal static class MajacloudEndpoints
    {
        public const string SdkHeaderValue = "unity/" + Majacloud.Version;
        public const string Project = "/v1/project";
        public const string Config = "/v1/config";
        public const string AuthGuest = "/v1/auth/guest";
        public const string AuthRefresh = "/v1/auth/refresh";
        public const string AuthLogout = "/v1/auth/logout";
        public const string AuthLinkStart = "/v1/auth/link/start";
        public const string AuthLinkStatus = "/v1/auth/link/status";
        public const string AuthLinkExchange = "/v1/auth/link/exchange";
        public const string PlayersMe = "/v1/players/me";
        public const string Cloud = "/v1/cloud";
        public const string Rewards = "/v1/rewards";
        public const string RewardsClaim = "/v1/rewards/claim";
        public const string Wallet = "/v1/wallet";

        private static readonly Regex Identifier = new Regex("^[A-Za-z0-9][A-Za-z0-9._-]{0,79}$", RegexOptions.Compiled);

        public static bool IsValidIdentifier(string value) => !string.IsNullOrEmpty(value) && Identifier.IsMatch(value);

        public static string LeaderboardScores(string slug) => "/v1/leaderboards/" + UnityWebRequest.EscapeURL(slug) + "/scores";
        public static string LeaderboardEntries(string slug) => "/v1/leaderboards/" + UnityWebRequest.EscapeURL(slug) + "/entries";
        public static string LeaderboardMe(string slug) => "/v1/leaderboards/" + UnityWebRequest.EscapeURL(slug) + "/me";
        public static string LeaderboardAroundMe(string slug) => "/v1/leaderboards/" + UnityWebRequest.EscapeURL(slug) + "/around-me";
        public static string CloudKey(string key) => "/v1/cloud/" + UnityWebRequest.EscapeURL(key);
    }
}
