using System;
using System.Runtime.Serialization;
using Kreta.Framework.Localization;

namespace Kreta.Framework
{
    /// <summary>
    /// Általános kiszolgáló hiba.
    /// </summary>
    [FriendlyName(1000000, "Ismeretlen kiszolgálóhiba történt!")]
    [Serializable]
    public class ServerException : FrameworkException
    {
        /// <summary>
        /// A kivétel végzetes-e, vagy sem.
        /// </summary>
        public bool IsFatal { get; private set; }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        public ServerException() { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A felhasználónak szánt hibaüzenet</param>
        public ServerException(string message)
            : this(message, null, false) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A felhasználónak szánt hibaüzenet</param>
        /// <param name="innerException">Az előző kivétel, ami történt</param>
        public ServerException(string message, Exception innerException)
            : this(message, innerException, false) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="info">Sorosítási adatok</param>
        /// <param name="context">Környezeti információk</param>
        protected ServerException(SerializationInfo info, StreamingContext context)
            : base(info, context) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A felhasználónak szánt hibaüzenet</param>
        /// <param name="isFatal">A kivétel végzetes-e, vagy sem</param>
        public ServerException(string message, bool isFatal)
            : this(message, null, isFatal) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A felhasználónak szánt hibaüzenet</param>
        /// <param name="innerException">Az előző kivétel, ami történt</param>
        /// <param name="isFatal">A kivétel végzetes-e, vagy sem</param>
        public ServerException(string message, Exception innerException, bool isFatal)
            : base(message, innerException)
        {
            IsFatal = isFatal;
            SetValue("IsFatal", isFatal.ToString());
        }
    }
}