<?php

// +----------------------------------------------------------------------
// | Hook 配置
// +----------------------------------------------------------------------
// | 控制 iyibai Hook 运行时的编译缓存、自定义扫描路径、调试日志、缓存重建锁和运行时治理能力。
// | HookService 会在复用缓存前校验插件、文件和配置指纹，避免使用过期 Hook 定义。
// +----------------------------------------------------------------------

return [
    // 是否启用编译后的 Hook 缓存。
    'yb_hook_cache' => true,

    // 自定义 Hook 扫描路径，默认使用 iyibai/hooks 和已启用插件目录。
    'yb_hook_path' => [],

    // 是否同步注册到 ThinkPHP Event，默认关闭以避免重复触发。
    'yb_think_hook_call' => false,

    // Hook 调试开关。开启后才允许输出更详细的注册表和编译诊断。
    'yb_hook_debug' => false,

    // 是否记录完整 Hook 分组内容。默认关闭，避免日志过大和路径信息泄露。
    'yb_hook_log_list' => false,

    // 慢 Hook 阈值，单位毫秒；0 表示关闭慢 Hook 日志。
    'yb_hook_slow_ms' => 200,

    // 是否启用 Hook 缓存重建互斥锁。
    'yb_hook_rebuild_lock' => true,

    // Hook 缓存重建锁 TTL，单位秒。
    'yb_hook_rebuild_lock_ttl' => 30,

    // 获取重建锁的等待时间，单位秒。
    'yb_hook_rebuild_wait_seconds' => 1,

    // 是否启用严格编译过滤：跳过非 public 和参数明显不兼容的方法。
    'yb_hook_strict_compile' => true,

    // Hook 缓存指纹模式：lite=mtime/size，manifest=文件清单 hash，content=小文件内容 hash。
    // 生产默认保持 lite；发布系统保留 mtime 或 size 不可靠时，再灰度切换到 manifest/content。
    'yb_hook_fingerprint_mode' => 'lite',

    // 部署版本号。发布时可写入构建号、Git commit 或业务版本，用于主动刷新 Hook 缓存。
    // 为空时不额外触发缓存失效；回滚时改回旧值或清空即可。
    'yb_hook_deploy_version' => '',

    // 是否在缓存元数据中记录文件清单摘要，便于诊断新增、删除 Hook 文件导致的缓存重建。
    'yb_hook_manifest_hash' => true,

    // content 指纹模式下参与内容 hash 的最大文件大小，避免插件冷启动扫描超大文件。
    'yb_hook_content_hash_max_bytes' => 1048576,

    // 是否启用 plugin.php hooks 的 mode/listorder/required 新挂载语义。
    // 关闭后所有挂载都按旧版 first 语义处理，便于快速回滚。
    'yb_hook_mount_strategy' => true,

    // 是否启用 Hook 返回值归一化。默认关闭，开启后 Hook 返回会补齐 code/data/msg。
    'yb_hook_result_normalize' => false,

    // Hook 契约校验模式：off=关闭，warn=只记录诊断，strict=将不匹配结果转为失败。
    'yb_hook_contract_mode' => 'warn',

    // 核心 Hook 契约表。先覆盖高频 Hook，未配置的 Hook 不做契约校验。
    'yb_hook_contracts' => [],

    // 是否启用当前进程内的 Hook 调用诊断统计。
    'yb_hook_metrics' => true,

    // 诊断统计最多保留的慢 Hook 和最近调用条数。
    'yb_hook_metrics_top' => 20,

    // Hook 运行时模式：facade_runtime=静态门面委派实例运行时，legacy_static=回退旧静态运行时。
    'yb_hook_runtime_mode' => 'facade_runtime',

    // 运行时上下文池最大保留数量，长驻进程中避免按商户无限增长。
    'yb_hook_runtime_pool_limit' => 32,

    // 是否启用不可变注册表快照。关闭后仍保留数组注册表兼容输出。
    'yb_hook_registry_snapshot' => true,

    // 编译类发现模式：legacy_require=直接 require_once，hybrid_token=token 发现后必要时 require，
    // strict_token=只接受 token/classmap 能发现且已安全加载的类。
    'yb_hook_compile_mode' => 'legacy_require',

    // token 编译模式下是否允许回退 require_once。hybrid 阶段建议开启，strict 阶段关闭。
    'yb_hook_compile_require_fallback' => true,

    // Hook 契约来源：inline=hook.php 内配置，file=config/hook_contract.php，mixed=二者合并。
    'yb_hook_contract_source' => 'mixed',

    // metrics 存储：memory=当前进程，cache=缓存聚合，file=runtime 文件，off=关闭。
    'yb_hook_metrics_store' => 'memory',

    // metrics 聚合数据 TTL，单位秒。
    'yb_hook_metrics_ttl' => 3600,
];
