package com.airlock.iam.oauth2.domain.model.logoutaction;

import com.airlock.iam.common.domain.model.logoutaction.LogoutAction;
import com.airlock.iam.common.domain.model.user.PrincipalInfo;
import com.airlock.iam.common.domain.service.token.UserSessionTokenService;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

public final class OAuth2AsCentricTokenRemoveAction implements LogoutAction {
   private final Provider<PrincipalInfo> principalInfo;
   private final Provider<UserSessionTokenService> userSessionTokenService;

   @Inject
   public OAuth2AsCentricTokenRemoveAction(Provider<PrincipalInfo> principalInfo, Provider<UserSessionTokenService> userSessionTokenService) {
      this.principalInfo = principalInfo;
      this.userSessionTokenService = userSessionTokenService;
   }

   @Override
   public boolean isApplicable() {
      return ((PrincipalInfo)this.principalInfo.get()).getAuthenticatedIdentity().isPresent();
   }

   @Override
   public void execute() {
      ((UserSessionTokenService)this.userSessionTokenService.get())
         .handleLogout(((PrincipalInfo)this.principalInfo.get()).getAuthenticatedIdentity().orElseThrow().id());
   }
}
