using Nancy.Authentication.Basic;
using Nancy.Security;
using NzbDrone.Core.Configuration;

namespace NzbDrone.Api.Authentication
{
    public interface IAuthenticationService : IUserValidator
    {
        bool Enabled { get; }
    }

    public class AuthenticationService : IAuthenticationService
    {
        private readonly IConfigFileProvider _configFileProvider;
        private static readonly NzbDroneUser AnonymousUser = new NzbDroneUser { UserName = "Anonymous" };


        public AuthenticationService(IConfigFileProvider configFileProvider)
        {
            _configFileProvider = configFileProvider;
        }


        public IUserIdentity Validate(string username, string password)
        {
            if (!Enabled)
            {
                return AnonymousUser;
            }

            if (_configFileProvider.Username.Equals(username) &&
                _configFileProvider.Password.Equals(password))
            {
                return new NzbDroneUser { UserName = username };
            }

            return null;
        }

        public bool Enabled
        {
            get
            {
                return _configFileProvider.AuthenticationEnabled;
            }
        }
    }
}