import { type Link, type Page } from '@defra/forms-model';
import { type RouteOptions } from '@hapi/hapi';
import { type ValidationErrorItem } from 'joi';
import { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js';
import { type BackLink } from '~/src/server/plugins/engine/components/types.js';
import { type FormModel } from '~/src/server/plugins/engine/models/index.js';
import { PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js';
import { type AnyFormRequest, type FormContext, type FormContextRequest, type FormPageViewModel, type FormPayload, type FormPayloadParams, type FormState, type FormStateValue, type FormSubmissionState } from '~/src/server/plugins/engine/types.js';
import { type FormRequest, type FormRequestPayload, type FormRequestPayloadRefs, type FormRequestRefs, type FormResponseToolkit } from '~/src/server/routes/types.js';
export declare class QuestionPageController extends PageController {
    collection: ComponentCollection;
    errorSummaryTitle: string;
    allowSaveAndExit: boolean;
    constructor(model: FormModel, pageDef: Page);
    get next(): Link[];
    get allowContinue(): boolean;
    getItemId(request?: FormContextRequest): string | undefined;
    /**
     * Used for mapping form payloads and errors to govuk-frontend's template api, so a page can be rendered
     * @param request - the hapi request
     * @param context - the form context
     */
    getViewModel(request: FormContextRequest, context: FormContext): FormPageViewModel;
    getRelevantPath(request: AnyFormRequest, context: FormContext): string;
    /**
     * Apply conditions to evaluation state to determine next page path
     */
    getNextPath(context: FormContext): string | undefined;
    /**
     * Gets the form payload (from state) for this page only
     */
    getFormDataFromState(request: FormContextRequest | undefined, state: FormSubmissionState): FormPayload;
    /**
     * Gets form params (from payload) for this page only
     */
    getFormParams(request?: FormContextRequest): FormPayloadParams;
    getStateFromValidForm(request: FormContextRequest, state: FormSubmissionState, payload: FormPayload): FormState;
    getErrors(details?: ValidationErrorItem[]): import("~/src/server/plugins/engine/types.js").FormSubmissionError[] | undefined;
    getState(request: AnyFormRequest): Promise<FormSubmissionState>;
    setState(request: AnyFormRequest, state: FormSubmissionState): Promise<FormSubmissionState>;
    mergeState(request: AnyFormRequest, state: FormSubmissionState, update: object): Promise<FormSubmissionState>;
    filterConditionalComponents(viewModel: FormPageViewModel, model: FormModel, evaluationState: Partial<Record<string, FormStateValue>>): import("~/src/server/plugins/engine/components/types.js").ComponentViewModel[];
    makeGetRouteHandler(): (request: FormRequest, context: FormContext, h: FormResponseToolkit) => Promise<import("@hapi/hapi").ResponseObject>;
    hasMissingNotificationEmail(request: FormRequest, context: FormContext): Promise<boolean>;
    /**
     * Get the back link for a given progress.
     */
    protected getBackLink(request: FormContextRequest, context: FormContext): BackLink | undefined;
    makePostRouteHandler(): (request: FormRequestPayload, context: FormContext, h: FormResponseToolkit) => Promise<import("@hapi/hapi").ResponseObject>;
    private dispatchExternal;
    proceed(request: FormContextRequest, h: FormResponseToolkit, nextPath?: string): import("@hapi/hapi").ResponseObject;
    /**
     * Handle save-and-exit action
     */
    handleSaveAndExit(request: FormRequestPayload, context: FormContext, h: FormResponseToolkit): import("@hapi/hapi").ResponseObject;
    /**
     * {@link https://hapi.dev/api/?v=20.1.2#route-options}
     */
    get getRouteOptions(): RouteOptions<FormRequestRefs>;
    /**
     * {@link https://hapi.dev/api/?v=20.1.2#route-options}
     */
    get postRouteOptions(): RouteOptions<FormRequestPayloadRefs>;
}
