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

import com.airlock.iam.base.api.domain.model.email.EmailAddress;
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.event.EmailAddressChanged;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.NonNull;

public final class EmailAddressChangedImpl extends AbstractUserEvent implements EmailAddressChanged {
   private final EmailAddress oldEmailAddress;
   private final EmailAddress newEmailAddress;

   public EmailAddressChangedImpl(EventCreationData eventCreationData, @NonNull UserId userId, EmailAddress oldEmailAddress, EmailAddress newEmailAddress) {
      super(eventCreationData, "Email Address Changed", userId);
      if (userId == null) {
         throw new NullPointerException("userId is marked non-null but is null");
      }

      this.oldEmailAddress = oldEmailAddress;
      this.newEmailAddress = newEmailAddress;
   }

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

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

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