package com.airlock.iam.authentication.domain.model.event;

import com.airlock.iam.authentication.api.domain.model.event.AuthenticationFlowSuccessfullyCompleted;
import com.airlock.iam.base.api.domain.model.event.EventType;
import com.airlock.iam.base.domain.model.event.EventCreationData;
import com.airlock.iam.common.api.domain.model.authmethod.AuthenticationMethod;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.common.domain.model.event.AbstractUserEvent;
import com.airlock.iam.login.domain.model.event.LoginEventTypes;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Collection;

public final class AuthenticationFlowSuccessfullyCompletedImpl extends AbstractUserEvent implements AuthenticationFlowSuccessfullyCompleted {
   private final Collection<AuthenticationMethod> authenticationMethods;
   private final UserIdentity userIdentity;

   public AuthenticationFlowSuccessfullyCompletedImpl(
      EventCreationData eventCreationData, UserIdentity userIdentity, Collection<AuthenticationMethod> authenticationMethods
   ) {
      super(eventCreationData, "Authentication Flow Successfully Completed", userIdentity.id());
      this.userIdentity = userIdentity;
      this.authenticationMethods = authenticationMethods;
   }

   @Override
   public EventType type() {
      return LoginEventTypes.AUTHENTICATION_FLOW_SUCCESSFULLY_COMPLETED;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public Collection<AuthenticationMethod> authenticationMethods() {
      return this.authenticationMethods;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public UserIdentity userIdentity() {
      return this.userIdentity;
   }
}
