using System;

namespace SocketHttpListener
{
  /// <summary>
  /// The exception that is thrown when a <see cref="WebSocket"/> gets a fatal error.
  /// </summary>
  public class WebSocketException : Exception
  {
    #region Internal Constructors

    internal WebSocketException ()
      : this (CloseStatusCode.Abnormal, null, null)
    {
    }

    internal WebSocketException (string message)
      : this (CloseStatusCode.Abnormal, message, null)
    {
    }

    internal WebSocketException (CloseStatusCode code)
      : this (code, null, null)
    {
    }

    internal WebSocketException (string message, Exception innerException)
      : this (CloseStatusCode.Abnormal, message, innerException)
    {
    }

    internal WebSocketException (CloseStatusCode code, string message)
      : this (code, message, null)
    {
    }

    internal WebSocketException (CloseStatusCode code, string message, Exception innerException)
      : base (message ?? code.GetMessage (), innerException)
    {
      Code = code;
    }

    #endregion

    #region Public Properties

    /// <summary>
    /// Gets the status code indicating the cause for the exception.
    /// </summary>
    /// <value>
    /// One of the <see cref="CloseStatusCode"/> enum values, represents the status code indicating
    /// the cause for the exception.
    /// </value>
    public CloseStatusCode Code {
      get; private set;
    }

    #endregion
  }
}