package com.airlock.iam.common.domain.service.token;

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.common.domain.service.oauth.OAuth2UserTokenService;
import com.airlock.iam.common.domain.service.rememberme.RememberMeTokenService;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

public final class UserSessionTokenServiceImpl implements UserSessionTokenService {
   private final Provider<OAuth2UserTokenService> oAuth2UserTokenService;
   private final Provider<RememberMeTokenService> rememberMeTokenService;

   @Inject
   public UserSessionTokenServiceImpl(Provider<OAuth2UserTokenService> oAuth2UserTokenService, Provider<RememberMeTokenService> rememberMeTokenService) {
      this.oAuth2UserTokenService = oAuth2UserTokenService;
      this.rememberMeTokenService = rememberMeTokenService;
   }

   @Override
   public void handleLogout(UserId userId) {
      ((OAuth2UserTokenService)this.oAuth2UserTokenService.get()).handleLogout(userId);
   }

   @Override
   public void handlePasswordChange(UserId userId) {
      ((OAuth2UserTokenService)this.oAuth2UserTokenService.get()).handlePasswordChange(userId);
      ((RememberMeTokenService)this.rememberMeTokenService.get()).handlePasswordChange(userId);
   }

   @Override
   public void handleUserLocked(UserId userId) {
      ((OAuth2UserTokenService)this.oAuth2UserTokenService.get()).handleUserLocked(userId);
      ((RememberMeTokenService)this.rememberMeTokenService.get()).handleUserLocked(userId);
   }
}
