using LiteCqrs;
using TeleWave.Application.Common.Interfaces;
using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Admin.Users.BlockUser;

public sealed class BlockUserCommandHandler(
    IIdentityService identityService,
    ICurrentUser currentUser
) : ICommandHandler<BlockUserCommand, Result>
{
    public Task<Result> Handle(BlockUserCommand command, CancellationToken cancellationToken)
    {
        if (currentUser.UserId == command.UserId)
            return Task.FromResult(Result.Failure(UserErrors.CannotBlockSelf));

        return identityService.BlockUserAsync(command.UserId, cancellationToken);
    }
}
