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

namespace NzbDrone.Api.Authentication
{
    public interface IAuthenticationService : IUserValidator
    {
        AuthenticationType AuthenticationType { 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 AuthenticationType AuthenticationType
        {
            get { return _configFileProvider.AuthenticationType; }
        }

        public IUserIdentity Validate(string username, string password)
        {
            if (AuthenticationType == AuthenticationType.Anonymous)
            {
                return AnonymousUser;
            }

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

            return null;
        }
    }
}