using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using Microsoft.AspNetCore.Identity;

namespace Hotline.Identity.Accounts
{
    public interface IAccountDomainService
    {
        //Task<IdentityResult> ResetPasswordAsync(TUser user, string token, string newPassword);
        Task<IdentityResult> ResetPasswordAsync(Account account, string password, string newPassword, CancellationToken cancellationToken = default);
        Task<IdentityResult> InitialPasswordAsync(Account account, CancellationToken cancellationToken = default);
        Task<IdentityResult> UpdatePasswordHashAsync(Account account, string newPassword, bool validatePassword = true, CancellationToken cancellationToken = default);
        PasswordVerificationResult VerifyPassword(Account account, string pwd);
        bool IsLockedOut(Account account);
        Task LockOutAsync(Account account, DateTime? lockoutEnd = null, CancellationToken cancellationToken = default);
        Task UnRegisterAsync(Account account, CancellationToken cancellationToken);
    }
}
