import { type Events, type FormDefinition, type Page, type Section } from '@defra/forms-model';
import { type Lifecycle, type RouteOptions, type Server } from '@hapi/hapi';
import { type ComponentCollection } from '../../../../server/plugins/engine/components/ComponentCollection.js';
import { type FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
import { type FormModel } from '../../../../server/plugins/engine/models/index.js';
import { type ExecutableCondition } from '../../../../server/plugins/engine/models/types.js';
import { type FormContext, type PageViewModelBase } from '../../../../server/plugins/engine/types.js';
import { type FormRequest, type FormRequestPayload, type FormRequestPayloadRefs, type FormRequestRefs, type FormResponseToolkit } from '../../../../server/routes/types.js';
export declare class PageController {
    /**
     * The base class for all page controllers. Page controllers are responsible for generating the get and post route handlers when a user navigates to `/{id}/{path*}`.
     */
    def: FormDefinition;
    name?: string;
    model: FormModel;
    pageDef: Page;
    id?: string;
    title: string;
    section?: Section;
    condition?: ExecutableCondition;
    events?: Events;
    collection?: ComponentCollection;
    viewName: string;
    allowSaveAndExit: boolean;
    constructor(model: FormModel, pageDef: Page);
    get path(): string;
    get href(): string;
    get keys(): string[];
    /**
     * {@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>;
    get viewModel(): PageViewModelBase;
    get feedbackLink(): string | undefined;
    get phaseTag(): "beta" | "alpha" | undefined;
    getHref(path: string): string;
    getStartPath(): string;
    getSummaryPath(): string;
    getStatusPath(): string;
    makeGetRouteHandler(): (request: FormRequest, context: FormContext, h: FormResponseToolkit) => ReturnType<Lifecycle.Method<FormRequestRefs>>;
    makePostRouteHandler(): (request: FormRequestPayload, context: FormContext, h: FormResponseToolkit) => ReturnType<Lifecycle.Method<FormRequestPayloadRefs>>;
    /**
     * Get supplementary state keys for clearing component state.
     *
     * This method returns page controller-level state keys only. The core component's
     * state key (the component's name) is managed separately by the framework and should
     * NOT be included in the returned array.
     *
     * Returns an empty array by default. Override in subclasses to provide
     * page-specific supplementary state keys (e.g., upload state, cached data).
     * @param _component - The component to get supplementary state keys for (optional)
     * @returns Array of supplementary state keys to clear (excluding the component name itself)
     */
    getStateKeys(_component?: FormComponent): string[];
    shouldShowSaveAndExit(server: Server): boolean;
}
