using System;

namespace Myriad.Gateway
{
    // TODO: unused?
    public class GatewayCloseException: Exception
    {
        public GatewayCloseException(int closeCode, string closeReason): base($"{closeCode}: {closeReason}")
        {
            CloseCode = closeCode;
            CloseReason = closeReason;
        }

        public int CloseCode { get; }
        public string CloseReason { get; }
    }

    public class GatewayCloseCode
    {
        public const int UnknownError = 4000;
        public const int UnknownOpcode = 4001;
        public const int DecodeError = 4002;
        public const int NotAuthenticated = 4003;
        public const int AuthenticationFailed = 4004;
        public const int AlreadyAuthenticated = 4005;
        public const int InvalidSeq = 4007;
        public const int RateLimited = 4008;
        public const int SessionTimedOut = 4009;
        public const int InvalidShard = 4010;
        public const int ShardingRequired = 4011;
        public const int InvalidApiVersion = 4012;
        public const int InvalidIntent = 4013;
        public const int DisallowedIntent = 4014;
    }
}