using System.ServiceModel;
using System.Threading.Tasks;
using DiplomovaPrace.Contracts.Security.InputModels;
using DiplomovaPrace.Contracts.Security.ViewModels;
using ProtoBuf.Grpc;

namespace DiplomovaPrace.Contracts.Security
{
	[ServiceContract]
	public interface ISecurityServiceContract
	{
		Task<AuthenticationResult> AuthenticateAdminAsync(LoginAccountIM inputModel);

		Task<AuthenticationResult> RefreshTokenAsync(CallContext context = default);

		Task RegisterAccountAsync(RegisterAccountIM inputModel);

		Task RecoverForgottenPasswordAsync(ForgottenPasswordIM inputModel);

		Task<PasswordChangeResult> PasswordChangeAsync(PasswordChangeIM inputModel, CallContext context = default);

		Task<TokenValidationResult> ValidatePasswordResetTokenAsync(PasswordResetTokenIM inputModel);

		Task PasswordResetAsync(PasswordResetIM inputModel);
	}
}
