package com.airlock.iam.login.domain.model.existingsessionbehavior;

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.common.domain.model.session.SessionId;
import com.airlock.iam.login.application.configuration.existingsessionbehavior.DestroyOtherUserSessionConfig;
import com.airlock.iam.login.domain.service.existingsessionbehavior.WafSessionIdRepository;
import com.google.common.collect.ImmutableList;
import jakarta.inject.Inject;

@LogicForConfig(DestroyOtherUserSessionConfig.class)
public class DestroyOtherUserSessionLogic extends SingleExistingUserSessionBehaviorLogic {
   private final WafSessionTerminator sessionTerminator;

   @Inject
   public DestroyOtherUserSessionLogic(WafSessionIdRepository wafSessionIdRepository, SessionId sessionId, WafSessionTerminator sessionTerminator) {
      super(wafSessionIdRepository, sessionId);
      this.sessionTerminator = sessionTerminator;
   }

   @Override
   protected void performAdditionalActionUponChangedSessionId(UserId username, String persistedSessionId, String newSessionId) {
      this.sessionTerminator.terminateSessions(ImmutableList.of(persistedSessionId));
   }
}
