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

namespace Kreta.Framework.Security
{
    /// <summary>
    /// Ismeretlen felhasználó
    /// </summary>
    [FriendlyName(1000010, "Hibás felhasználónév vagy jelszó!")]
    [ErrorCode(Events.SECURITY_LOGINFAILED)]
    [Serializable]
    public class UserNotFoundException : SecurityException
    {
        /// <summary>
        /// Az osztály konstruktora
        /// </summary>
        /// <param name="loginName">A felhasználó neve (bejelentkezési azonosítója)</param>
        public UserNotFoundException(string loginName)
            : base("Hibás felhasználónév vagy jelszó!")
        {
            SetValue("LoginName", loginName);
        }

        /// <summary>
        /// Az osztály alapértelmezett konstruktora.
        /// </summary>        
        public UserNotFoundException() { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A kivétel üzenete</param>
        /// <param name="innerException">A belső kivétel</param>        
        public UserNotFoundException(string message, Exception innerException)
            : base(message, innerException) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="info">Sorosítási adatok</param>
        /// <param name="context">Sorosítási adatfolyam</param>
        protected UserNotFoundException(SerializationInfo info, StreamingContext context)
            : base(info, context) { }
    }

    [FriendlyName(1000015, "A jelszó nem felel meg a jelszó beállítási követelményeknek!")]
    [ErrorCode(Events.SECURITY_LOGINFAILED)]
    [Serializable]
    public sealed class PasswordComplexcityException : SecurityException
    {
        /// <summary>
        /// Az osztály konstruktora
        /// </summary>
        /// <param name="loginName">A felhasználó neve (bejelentkezési azonosítója)</param>
        public PasswordComplexcityException(string loginName)
            : base("A jelszó nem felel meg a jelszó beállítási követelményeknek!")
        {
            SetValue("LoginName", loginName);
        }

        /// <summary>
        /// Az osztály alapértelmezett konstruktora.
        /// </summary>        
        [Obsolete("Ezt a konstruktort ne használd!")]
        public PasswordComplexcityException() { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="message">A kivétel üzenete</param>
        /// <param name="innerException">A belső kivétel</param>
        [Obsolete("Ezt a konstruktort ne használd!")]
        public PasswordComplexcityException(string message, Exception innerException)
            : base(message, innerException) { }

        /// <summary>
        /// Az osztály konstruktora.
        /// </summary>
        /// <param name="info">Sorosítási adatok</param>
        /// <param name="context">Sorosítási adatfolyam</param>
        PasswordComplexcityException(SerializationInfo info, StreamingContext context)
            : base(info, context) { }
    }
}