/**
 * 全局常量定义
 * 集中管理项目中的魔法数字和硬编码值
 */

// ============================================
// AI Agent 相关常量
// ============================================

/** AI Agent 默认最大步数 */
export const DEFAULT_AGENT_MAX_STEPS = 10;

/** AI Agent 最大步数限制 */
export const MAX_AGENT_STEPS = 24;

/** AI Agent 最小步数 */
export const MIN_AGENT_STEPS = 1;

/** 客户端工具默认超时时间（毫秒） */
export const DEFAULT_CLIENT_TOOL_TIMEOUT_MS = 60_000;

// ============================================
// 网络请求相关常量
// ============================================

/** OpenAI 兼容 API 最小超时（毫秒） */
export const MIN_API_TIMEOUT_MS = 500;

/** OpenAI 兼容 API 默认超时（毫秒） */
export const DEFAULT_API_TIMEOUT_MS = 20_000;

/** OpenAI 兼容 API 最大超时（毫秒） */
export const MAX_API_TIMEOUT_MS = 120_000;

/** OpenAI 最小输出 token 数 */
export const MIN_COMPLETION_TOKENS = 64;

/** OpenAI 最大输出 token 数 */
export const MAX_COMPLETION_TOKENS = 16_000;

// ============================================
// 编辑器相关常量
// ============================================

/** 内容加载延迟时间（毫秒） */
export const CONTENT_LOADING_DELAY_MS = 200;

/** 编辑器块标题最小级别 */
export const MIN_BLOCK_LEVEL = 1;

/** 编辑器块标题最大级别 */
export const MAX_BLOCK_LEVEL = 5;

/** 零延迟 setTimeout（用于将任务推入事件循环） */
export const ZERO_DELAY_MS = 0;

// ============================================
// 思维导图相关常量
// ============================================

/** 思维导图最大附件数量 */
export const MAX_MINDMAP_ATTACHMENTS = 12;

/** 思维导图最大选中节点数 */
export const MAX_SELECTED_NODES = 6;

// ============================================
// RAG 搜索相关常量
// ============================================

/** RAG 默认搜索结果数量 */
export const DEFAULT_RAG_TOP_K = 12;

/** RAG 默认 chunk 结果数量 */
export const DEFAULT_RAG_CHUNK_TOP_K = 12;

/** 文档搜索默认结果数量 */
export const DEFAULT_DOCS_SEARCH_LIMIT = 12;

/** 文档读取默认最大字符数 */
export const DEFAULT_DOCS_READ_MAX_CHARS = 2500;

/** 文档获取默认最大块数 */
export const DEFAULT_DOC_GET_MAX_BLOCKS = 80;

/** 文档查找默认最大结果数 */
export const DEFAULT_DOC_FIND_MAX_RESULTS = 8;

// ============================================
// 资产/附件相关常量
// ============================================

/** 思维导图从资产转换最大项目数 */
export const DEFAULT_ASSET_TO_MINDMAP_MAX_ITEMS = 120;

/** 搜索默认结果数量 */
export const DEFAULT_SEARCH_COUNT = 6;

// ============================================
// UI 相关常量
// ============================================

/** 表格嵌入预览最小高度（像素） */
export const MIN_EMBED_HEIGHT = 120;

/** 表格嵌入预览最大高度（像素） */
export const MAX_EMBED_HEIGHT = 600;

/** 表格嵌入预览默认高度（像素） */
export const DEFAULT_EMBED_HEIGHT = 300;

/** 上下文菜单距离窗口边缘的最小内边距（像素） */
export const CONTEXT_MENU_PADDING = 12;

// ============================================
// 工具函数
// ============================================

/**
 * 将数值限制在指定范围内
 * @param n 输入值
 * @param min 最小值
 * @param max 最大值
 * @returns 限制后的值
 */
export const clamp = (n: number, min: number, max: number): number =>
  Math.max(min, Math.min(max, n));
