class EidasAwaitingCycle3DataStateController extends AbstractAwaitingCycle3DataStateController<EidasAttributeQueryRequestDto, EidasAwaitingCycle3DataState> implements StateController, ResponseProcessingStateController, ErrorResponsePreparedStateController {

    @Override
    public EidasAttributeQueryRequestDto createAttributeQuery(final Cycle3Dataset cycle3Dataset) {
        MatchingServiceConfigEntityDataDto matchingServiceConfigData = getMatchingServiceConfigProxy().getMatchingService(getState().getMatchingServiceEntityId());
        URI matchingServiceAdapterUri = matchingServiceConfigData.getUri();

        return new EidasAttributeQueryRequestDto(
            getState().getRequestId(),
            getState().getRequestIssuerEntityId(),
            getState().getAssertionConsumerServiceUri(),
            getAssertionRestrictionsFactory().getAssertionExpiry(),
            getState().getMatchingServiceEntityId(),
            matchingServiceAdapterUri,
            DateTime.now().plus(getPolicyConfiguration().getMatchingServiceResponseWaitPeriod()),
            matchingServiceConfigData.isOnboarding(),
            getState().getLevelOfAssurance(),
            getState().getPersistentId(),
            Optional.ofNullable(cycle3Dataset),
            Optional.empty(),
            getState().getEncryptedIdentityAssertion(),
            getState().getCountrySignedResponseContainer()
        );
    }

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

}