package com.airlock.iam.flow.shared.domain.service.cronto;

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.common.domain.model.cronto.ExternalCrontoDeviceId;
import com.airlock.iam.core.domain.model.cronto.CrontoOtp;
import com.airlock.iam.core.domain.model.cronto.challenge.CrontoDeactivationChallenge;
import com.airlock.iam.core.misc.cronto.CrontoHandler;
import com.airlock.iam.core.misc.impl.cronto.CrontoActivationSession;
import com.airlock.iam.core.misc.impl.token.cronto.CrontoDeviceToken;
import com.airlock.iam.flow.shared.domain.model.cronto.CompleteDeviceActivationResult;
import com.airlock.iam.flow.shared.domain.model.cronto.StartDeviceActivationResult;
import java.util.List;
import java.util.Optional;

public interface CrontoSelfManagementService {
   CrontoActivationSession startOnScreenActivation(UserId var1);

   StartDeviceActivationResult startDeviceActivation(UserId var1, CrontoOtp var2);

   StartDeviceActivationResult verifyActivationOtp(CrontoActivationSession var1, CrontoOtp var2);

   CompleteDeviceActivationResult completeDeviceActivation(String var1, CrontoOtp var2, CrontoActivationSession var3);

   boolean canActivateDeviceOnScreen(UserId var1, CrontoHandler.CrontoSelfRegistrationContext var2);

   String getDeviceIdForLogging(UserId var1, ExternalCrontoDeviceId var2);

   List<CrontoDeviceToken> getDevicesByUsername(UserId var1);

   CrontoDeviceToken getDevice(UserId var1, ExternalCrontoDeviceId var2);

   void updateLabel(UserId var1, ExternalCrontoDeviceId var2, String var3);

   Optional<CrontoDeactivationChallenge> deleteDevice(UserId var1, ExternalCrontoDeviceId var2);

   void enableDevice(UserId var1, ExternalCrontoDeviceId var2);

   void disableDevice(UserId var1, ExternalCrontoDeviceId var2);

   void allowPushNotifications(UserId var1, ExternalCrontoDeviceId var2);

   void disallowPushNotification(UserId var1, ExternalCrontoDeviceId var2);
}
