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

import com.airlock.iam.common.domain.model.QueryString;
import com.airlock.iam.flow.api.domain.model.flow.FlowResult;
import com.airlock.iam.flow.domain.model.flow.FlowProvider;
import com.airlock.iam.flow.shared.domain.model.step.oauth2.OAuth2AuthorizationVerifyingFlowStep;
import jakarta.inject.Inject;

public final class OAuth2Authentication {
   private final FlowProvider flowProvider;

   @Inject
   public OAuth2Authentication(FlowProvider flowProvider) {
      this.flowProvider = flowProvider;
   }

   public FlowResult buildAuthorizationRequest() {
      return this.flowProvider
         .getCurrentOrStartNew()
         .execute(OAuth2AuthorizationVerifyingFlowStep::buildAuthorizationRequest, OAuth2AuthorizationVerifyingFlowStep.class);
   }

   public FlowResult verifyAuthorizationResponse(QueryString queryString) {
      return this.flowProvider
         .getCurrentOrStartNew()
         .execute(flowStep -> flowStep.verifyAuthorizationResponse(queryString), OAuth2AuthorizationVerifyingFlowStep.class);
   }
}
