using System.Threading.Tasks;
using Knoks.Core.Entities;
using System.Collections.Generic;
using Knoks.Core.Entities.Args;

namespace Knoks.Core.Logic.Interfaces
{
    public interface IUserManager : IInitializable
    {
        Task<User> CreateUser(CreateUserArgs args);
        Task<User> UpdateUser(UpdateUserArgs args);
        Task<IEnumerable<User>> GetUsers(long? userId, UserType? userType = null);
        Task<User> GetUser(long userId);
        Task<User> GetUserByEmail(string email);
        Task<User> AuthenticateUser(int apiConsumerId, string email, string password);
        FileResponse GetAvatarFile(int userId);
        User PlatformUser { get; }
        Account PlatformUserAccount { get;}
        Task<UserAccounts> GetUserInfo(string accountWalletAddress);
        Task<bool> UserExists(string userName);
        Task<bool> UserEmailExists(string email);
        Task<bool> UserNameExists(string userName, long? userId);
        Task<bool> CheckPasswordResetToken(string token);
        Task SendPasswordResetLink(string email, string link);
        Task<bool> PasswordReset(string token, string newPassword);
    }
}