using System;

namespace SharedLibraryCore.RCon
{
    public static class StaticHelpers
    {
        /// <summary>
        ///     defines the type of RCon query sent to a server
        /// </summary>
        public enum QueryType
        {
            /// <summary>
            ///     retrieve the status of a server
            ///     does not require RCon password
            /// </summary>
            GET_STATUS,

            /// <summary>
            ///     retrieve the information of a server
            ///     server responds with key/value pairs
            ///     RCon password is required
            /// </summary>
            GET_INFO,

            /// <summary>
            ///     retrieve the value of a DVAR
            ///     RCon password is required
            /// </summary>
            GET_DVAR,

            /// <summary>
            ///     set the value of a DVAR
            ///     RCon password is required
            /// </summary>
            SET_DVAR,

            /// <summary>
            ///     execute a command
            ///     RCon password is required
            /// </summary>
            COMMAND,

            /// <summary>
            ///     get the full server command information
            ///     RCon password is required
            /// </summary>
            COMMAND_STATUS
        }

        /// <summary>
        ///     timeout in seconds to wait for a socket send or receive before giving up
        /// </summary>
        public static TimeSpan SocketTimeout(int retryAttempt)
        {
            return retryAttempt switch
            {
                1 => TimeSpan.FromMilliseconds(550),
                2 => TimeSpan.FromMilliseconds(1000),
                3 => TimeSpan.FromMilliseconds(2000),
                4 => TimeSpan.FromMilliseconds(5000),
                _ => TimeSpan.FromMilliseconds(10000)
            };
        }
    }
}
