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

import com.airlock.iam.authentication.application.configuration.migration.NeverMigrateStepConfig;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import com.airlock.iam.common.domain.model.principal.UserPrincipal;
import com.airlock.iam.flow.api.domain.model.step.FlowStep;
import com.airlock.iam.flow.api.domain.model.step.StepResult;
import com.airlock.iam.log.api.signing.SigningLogger;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(NeverMigrateStepConfig.class)
public class NeverMigrateStep implements FlowStep {
   private final Provider<UserPrincipal> principal;
   private final SigningLogger signingLogger;

   @Inject
   public NeverMigrateStep(Provider<UserPrincipal> principal, SigningLogger signingLogger) {
      this.principal = principal;
      this.signingLogger = signingLogger;
   }

   @Override
   public StepResult initialize() {
      PersistentUser user = ((UserPrincipal)this.principal.get()).user();
      user.setNextAuthMethod(null);
      user.setAuthMigrationDate(null);
      this.signingLogger.log("User '%s' rejected the migration", new Object[]{user.getName()});
      return this.stepResultFactory().success().build();
   }

   @Override
   public String getDescription() {
      return "Never Migrate Step";
   }
}
