package com.airlock.iam.authentication.application.configuration.targetapp;

import com.airlock.iam.authentication.application.configuration.AuthenticationFlowConfigSpec;
import com.airlock.iam.authentication.application.configuration.AuthorizationFlowConfig;
import com.airlock.iam.authentication.application.configuration.idpropagation.IdentityPropagationConfig;
import com.airlock.iam.common.api.application.configuration.valueprovider.UsernameToPropagateProviderConfig;
import com.airlock.iam.flow.api.domain.model.flow.ApplicationId;
import com.airlock.iam.login.api.application.configuration.targetapp.URIBasedApplicationSelectorConfig;
import com.airlock.iam.login.application.configuration.targetapp.WafCredentialProviderConfig;
import jakarta.annotation.Nullable;
import java.util.List;
import java.util.Optional;

public interface TargetApplicationConfigSpec {
   String ID_PROPERTY = "applicationId";
   String AUTHENTICATION_FLOW = "authenticationFlow";
   String AUTHORIZATION_FLOW = "authorizationFlow";
   String IDENTITY_PROPAGATION = "identityPropagation";

   ApplicationId getApplicationId();

   @Nullable
   URIBasedApplicationSelectorConfig getApplicationSelector();

   AuthenticationFlowConfigSpec getAuthenticationFlow();

   Optional<AuthorizationFlowConfig> getAuthorizationFlow();

   List<WafCredentialProviderConfig> getAirlockGatewayRoles();

   List<IdentityPropagationConfig> getIdentityPropagation();

   UsernameToPropagateProviderConfig getUsernameToPropagateProvider();
}
