package com.airlock.iam.common.domain.model.cronto.event;

import com.airlock.iam.base.api.domain.model.event.EventType;
import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.domain.model.event.EventCreationData;
import com.airlock.iam.common.api.domain.model.cronto.CrontoDeviceId;
import com.airlock.iam.common.api.domain.model.event.CrontoDeviceDeleted;
import com.airlock.iam.common.domain.model.event.AbstractAuthenticationDeviceEvent;
import com.airlock.iam.common.domain.model.event.CommonEventTypes;
import com.airlock.iam.core.domain.model.authentication.method.KnownAuthenticationMethods;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.NonNull;

public final class CrontoDeviceDeletedImpl extends AbstractAuthenticationDeviceEvent implements CrontoDeviceDeleted {
   @NonNull
   private final CrontoDeviceId deviceId;

   public CrontoDeviceDeletedImpl(EventCreationData eventCreationData, UserId userId, @NonNull CrontoDeviceId deviceId) {
      super(eventCreationData, "Cronto Device Deleted", userId, KnownAuthenticationMethods.CRONTO);
      if (deviceId == null) {
         throw new NullPointerException("deviceId is marked non-null but is null");
      }

      this.deviceId = deviceId;
   }

   @Override
   public EventType type() {
      return CommonEventTypes.CRONTO_DEVICE_DELETED;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public CrontoDeviceId deviceId() {
      return this.deviceId;
   }
}
