import type { VextApp } from "../../types/app.js";
import type { AppInternals } from "../app.js";
import type { VextServerHandle } from "../../types/adapter.js";
import type { WorkerHeartbeatMessage, WorkerMetricsMessage, WorkerReadyMessage, WorkerRequestRestartMessage } from "./ipc-types.js";
/**
 * Worker 运行时配置
 *
 * 从环境变量和 VextConfig 中提取。
 */
export interface WorkerConfig {
    /** Worker 编号（来自 VEXT_WORKER_ID 环境变量） */
    workerId: string;
    /**
     * 内存阈值（字节）
     *
     * 堆内存超过此值时 Worker 主动请求 Master 重启。
     * 可通过 config.cluster.memoryThreshold 配置。
     *
     * @default 1073741824 (1GB)
     */
    memoryThreshold: number;
    /**
     * Worker 数量（用于 cluster 兼容性检测）
     *
     * 由 Master 通过 VEXT_WORKER_COUNT 环境变量传入。
     */
    workerCount: number;
}
/**
 * WorkerContext — Worker 运行时上下文
 *
 * 持有所有定时器和资源引用，便于统一清理。
 */
interface WorkerContext {
    /** 心跳定时器 */
    heartbeatTimer: ReturnType<typeof setInterval> | null;
    /** 指标上报定时器 */
    metricsTimer: ReturnType<typeof setInterval> | null;
    /** 内存检测定时器 */
    memoryCheckTimer: ReturnType<typeof setInterval> | null;
    /** bootstrap 返回的资源引用 */
    app: VextApp | null;
    internals: AppInternals | null;
    serverHandle: VextServerHandle | null;
    /** 是否已触发关闭 */
    isShuttingDown: boolean;
}
/**
 * workerMain — Worker 进程主入口
 *
 * 由 bootstrap.ts 在 cluster.isWorker 且 VEXT_MODE='start' 时调用。
 *
 * 完整流程：
 *   1. 读取环境变量，确定 Worker 编号和配置
 *   2. 执行标准 bootstrap()（完整启动流程）
 *   3. 注册 IPC 消息处理器（响应 Master 指令）
 *   4. 通知 Master 已就绪（发送 'ready' 消息）
 *   5. 启动心跳定时器
 *   6. 启动指标上报定时器
 *   7. 启动内存检测定时器
 *   8. 执行 cluster 兼容性检测（打印 WARN）
 *
 * 错误处理：
 *   bootstrap 失败 → 打印错误 → process.exit(1)
 *   Master 连接断开（disconnect）→ 触发优雅关闭
 *
 * @param rootDir 用户项目根目录（与 bootstrap 共用）
 * @param bootstrapFn bootstrap 函数引用（避免循环依赖，由调用方传入）
 *
 * @example
 * ```typescript
 * // 在 bootstrap.ts 的 cluster.isWorker 分支中调用
 * import { workerMain } from './cluster/worker.js'
 * import { bootstrap } from './bootstrap.js'
 *
 * await workerMain(rootDir, bootstrap)
 * ```
 */
export declare function workerMain(rootDir: string, bootstrapFn: (rootDir: string) => Promise<{
    app: VextApp;
    serverHandle: VextServerHandle;
    internals: AppInternals;
}>): Promise<void>;
/**
 * registerIPCHandlers — 注册 Master → Worker IPC 消息处理器
 *
 * 处理的消息类型：
 *   - set-title:    设置 process.title
 *   - shutdown:     触发优雅关闭
 *   - health-check: 立即回复心跳
 *   - broadcast:    转发给 app 事件系统（后续扩展用）
 */
declare function registerIPCHandlers(ctx: WorkerContext, config: WorkerConfig): void;
/**
 * shutdownWorker — 触发 Worker 优雅关闭
 *
 * 调用 internals.shutdown(serverHandle) 执行完整的关闭流程：
 *   1. 停止接受新请求
 *   2. 等待飞行中请求完成
 *   3. 执行 onClose 钩子
 *   4. process.exit(0)
 *
 * 同时清理 Worker 自己的定时器（心跳 / 指标 / 内存检测）。
 */
declare function shutdownWorker(ctx: WorkerContext, config: WorkerConfig): void;
/**
 * startHeartbeat — 启动心跳定时器
 *
 * 每 HEARTBEAT_INTERVAL 毫秒向 Master 发送心跳消息。
 * Master 通过 lastHeartbeat 时间戳检测 Worker 是否存活。
 *
 * 定时器使用 .unref() 不阻止进程退出。
 *
 * @returns 定时器引用（用于清理）
 */
declare function startHeartbeat(): ReturnType<typeof setInterval>;
/**
 * startMetricsReporter — 启动指标上报定时器
 *
 * 每 METRICS_INTERVAL 毫秒向 Master 上报运行指标。
 * 包含内存使用详情、活跃请求数、累计请求数、平均响应时间。
 *
 * 当前版本指标来源：
 *   - 内存：process.memoryUsage()
 *   - 请求计数：固定为 0（后续由 response-wrapper 累加器提供）
 *
 * 定时器使用 .unref() 不阻止进程退出。
 *
 * @param app VextApp 实例
 * @returns 定时器引用（用于清理）
 */
declare function startMetricsReporter(app: VextApp): ReturnType<typeof setInterval>;
/**
 * startMemoryMonitor — 启动内存阈值检测定时器
 *
 * 每 MEMORY_CHECK_INTERVAL 毫秒检查堆内存使用量。
 * 超过阈值时向 Master 发送 'request-restart' 消息，
 * Master 会 fork 新 Worker 替换当前 Worker。
 *
 * 注意：
 *   - 仅发送一次请求（通过 requested 标志防止重复）
 *   - 不立即退出，等待 Master 发送 shutdown 指令
 *   - Worker 继续处理请求直到被替换
 *
 * @param config Worker 配置
 * @returns 定时器引用（用于清理）
 */
declare function startMemoryMonitor(config: WorkerConfig): ReturnType<typeof setInterval>;
/**
 * sendToMaster — 向 Master 发送 IPC 消息
 *
 * 封装 process.send()，添加 null 检查和错误捕获。
 *
 * process.send 不存在的场景：
 *   - 进程不是通过 fork() 创建的
 *   - IPC channel 已断开
 */
declare function sendToMaster(msg: WorkerReadyMessage | WorkerHeartbeatMessage | WorkerMetricsMessage | WorkerRequestRestartMessage): void;
/**
 * cleanupTimers — 清理所有 Worker 定时器
 *
 * 在 Worker 关闭或 bootstrap 失败时调用。
 */
declare function cleanupTimers(ctx: WorkerContext): void;
/**
 * @internal 仅供单元测试直接访问
 */
export declare const _internals: {
    readonly HEARTBEAT_INTERVAL: 10000;
    readonly METRICS_INTERVAL: 30000;
    readonly DEFAULT_MEMORY_THRESHOLD: number;
    readonly MEMORY_CHECK_INTERVAL: 60000;
    readonly sendToMaster: typeof sendToMaster;
    readonly cleanupTimers: typeof cleanupTimers;
    readonly registerIPCHandlers: typeof registerIPCHandlers;
    readonly shutdownWorker: typeof shutdownWorker;
    readonly startHeartbeat: typeof startHeartbeat;
    readonly startMetricsReporter: typeof startMetricsReporter;
    readonly startMemoryMonitor: typeof startMemoryMonitor;
};
export {};
