using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using static Data.Models.Client.EFClient;
using static SharedLibraryCore.Server;

namespace SharedLibraryCore.Configuration
{
    /// <summary>
    ///     Config driven command properties
    /// </summary>
    public class CommandProperties
    {
        /// <summary>
        ///     Specifies the command name
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        ///     Alias of this command
        /// </summary>
        public string Alias { get; set; }

        /// <summary>
        ///     Specifies the minimum permission level needed to execute the
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public Permission MinimumPermission { get; set; }

        /// <summary>
        ///     Indicates if the command can be run by another user (impersonation)
        /// </summary>
        public bool AllowImpersonation { get; set; }

        /// <summary>
        ///     Specifies the games supporting the functionality of the command
        /// </summary>
        [JsonProperty(ItemConverterType = typeof(StringEnumConverter))]
        public Game[] SupportedGames { get; set; } = Array.Empty<Game>();
    }
}