import type { VextAdapter } from "../../types/adapter.js";
import type { VextApp } from "../../types/app.js";
/**
 * Fastify Adapter 选项
 *
 * 用户通过 fastifyAdapter(options) 工厂函数传入，
 * 控制 Fastify 实例的初始化行为。
 *
 * 所有选项均可选，默认值已为 vext 场景优化：
 *   - logger: false（vext 有自己的 pino logger）
 *   - pluginTimeout: 10000ms
 *   - bodyLimit: 1MB
 *   - ignoreTrailingSlash: true
 *   - caseSensitive: false
 */
export interface FastifyAdapterOptions {
    /** Fastify 内置日志（默认 false，vext 有自己的 logger） */
    logger?: boolean;
    /**
     * Fastify 插件超时（毫秒，默认 10000）
     * Fastify 内部 register 的超时，与 vext plugin-loader 超时独立
     */
    pluginTimeout?: number;
    /**
     * 请求体大小限制（字节，默认 1MB）
     * 对应 Fastify 的 bodyLimit
     */
    bodyLimit?: number;
    /**
     * 忽略尾部斜杠（默认 true）
     * /users 和 /users/ 视为相同路由
     */
    ignoreTrailingSlash?: boolean;
    /**
     * 大小写敏感（默认 false）
     * /Users 和 /users 视为相同路由
     */
    caseSensitive?: boolean;
}
/**
 * createFastifyAdapter — 创建基于 Fastify 的 VextAdapter 实例
 *
 * 将 Fastify 作为底层 HTTP 框架，实现 VextAdapter 接口。
 * 这是 VextAdapter 的第二个实现（第一个是 Hono Adapter），
 * 用于验证 Adapter 抽象层的完备性。
 *
 * 架构说明：
 *   - Fastify 用于路由匹配（find-my-way radix tree），不使用 Fastify 自带的中间件/Hook 机制
 *   - 中间件链执行由 vext 自己的 executeChain 实现（洋葱模型）
 *   - 请求 / 响应对象在 Fastify route handler 内转换为 VextRequest / VextResponse
 *   - 全局中间件通过 registerMiddleware() 收集，在每个路由执行时拼接到链头
 *
 * 与 Hono Adapter 的核心差异：
 *   - 请求/响应模型：Fastify 直接操作 Node.js 原生对象（IncomingMessage/ServerResponse），
 *     而 Hono 操作 Web API（Request/Response）
 *   - Body 解析：Fastify 默认自动解析 JSON，需要通过 removeAllContentTypeParsers
 *     禁用以避免与 vext body-parser 冲突
 *   - JSON 序列化：使用 reply.send(JSON.stringify(...)) 手动序列化，
 *     绕过 Fastify 的 fast-json-stringify 自动序列化，保证跨 Adapter 行为一致
 *   - buildHandler：Fastify 提供 fastify.routing(req, res)，
 *     是标准的 Node.js (IncomingMessage, ServerResponse) handler
 *
 * HTTP 服务器：
 *   - Fastify 内置 Node.js http.createServer
 *   - listen() 调用 fastify.listen() 启动服务器
 *   - close() 调用 fastify.close() 优雅关闭
 *   - buildHandler() 返回 fastify.routing 作为 Node.js handler，
 *     用于 dev 模式热重载的 HotSwappableHandler 原子替换
 *
 * @param options Fastify 适配器配置选项
 * @param app     VextApp 实例（用于传递给 createVextRequest 的 app 引用）
 * @returns VextAdapter 实例
 *
 * @see 08a-fastify-adapter.md §3（Adapter 核心实现）
 * @see adapters/hono/adapter.ts（Hono Adapter 对应实现）
 * @see IMPLEMENTATION-PLAN.md 任务 3.4
 */
export declare function createFastifyAdapter(options: FastifyAdapterOptions, app: VextApp): VextAdapter;
