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

import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.base.misc.result.Result;
import com.airlock.iam.oauth2.api.domain.model.tokenexchange.OAuth2TokenExchangeRawToken;
import com.airlock.iam.oauth2.api.domain.model.tokenexchange.jwt.OAuth2TokenExchangeValidatedTokenData;
import com.airlock.iam.oauth2.application.configuration.tokenexchange.OAuth2OIDCDiscoverySubjectTokenValidationConfig;
import com.airlock.iam.oauth2.domain.model.validation.OAuth2Error;
import com.airlock.iam.oauth2.domain.service.tokenexchange.validation.OAuth2TokenExchangeTokenValidationService;
import jakarta.inject.Inject;
import jakarta.inject.Provider;

@LogicForConfig(OAuth2OIDCDiscoverySubjectTokenValidationConfig.class)
public class OAuth2OIDCDiscoverySubjectTokenValidation implements OAuth2SubjectTokenValidation {
   private final Provider<OAuth2TokenExchangeTokenValidationService> validationService;

   @Inject
   public OAuth2OIDCDiscoverySubjectTokenValidation(Provider<OAuth2TokenExchangeTokenValidationService> validationService) {
      this.validationService = validationService;
   }

   @Override
   public Result<OAuth2TokenExchangeValidatedTokenData, OAuth2Error> validate(OAuth2TokenExchangeRawToken subjectToken) {
      return ((OAuth2TokenExchangeTokenValidationService)this.validationService.get()).validate(subjectToken);
   }
}
