class AwaitingCycle3DataStateController extends AbstractAwaitingCycle3DataStateController<AttributeQueryRequestDto, AwaitingCycle3DataState> implements StateController, ResponseProcessingStateController, ErrorResponsePreparedStateController {

    @Override
    public void handleCycle3DataSubmitted(final String principalIpAddressAsSeenByHub) {
        getHubEventLogger().logCycle3DataObtained(
            getState().getSessionId(),
            getState().getRequestIssuerEntityId(),
            getState().getSessionExpiryTimestamp(),
            getState().getRequestId(),
            principalIpAddressAsSeenByHub
        );

        Cycle3MatchRequestSentState cycle3MatchRequestSentState = new Cycle3MatchRequestSentState(
            getState().getRequestId(),
            getState().getRequestIssuerEntityId(),
            getState().getSessionExpiryTimestamp(),
            getState().getAssertionConsumerServiceUri(),
            getState().getSessionId(),
            getState().getTransactionSupportsEidas(),
            getState().getIdentityProviderEntityId(),
            getState().getRelayState().orElse(null),
            getState().getLevelOfAssurance(),
            getState().isRegistering(),
            getState().getMatchingServiceEntityId(),
            getState().getEncryptedMatchingDatasetAssertion(),
            getState().getAuthnStatementAssertion(),
            getState().getPersistentId()
        );

        getStateTransitionAction().transitionTo(cycle3MatchRequestSentState);
    }

    public  AwaitingCycle3DataStateController(
        final AwaitingCycle3DataState state,
        final HubEventLogger hubEventLogger,
        final StateTransitionAction stateTransitionAction,
        final TransactionsConfigProxy transactionsConfigProxy,
        final ResponseFromHubFactory responseFromHubFactory,
        final PolicyConfiguration policyConfiguration,
        final AssertionRestrictionsFactory assertionRestrictionsFactory,
        final MatchingServiceConfigProxy matchingServiceConfigProxy);

}