import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
import { Box, Text } from 'ink';
/** 阶段标签中文映射 */
const STAGE_LABELS = {
    thinking: '思考中',
    streaming: '回答中',
    tool_executing: '调用工具',
    compacting: '压缩历史',
};
/** 工具参数预览单行最大宽度（fallback 时用） */
const TOOL_ARGS_MAX = 60;
/** 按字符宽度截断，超长尾部加 …（按字符而非 byte，够用） */
function truncateTail(s, max) {
    if (s.length <= max)
        return s;
    return `${s.slice(0, max - 1)}…`;
}
/**
 * 静态指示符：不使用动画 spinner（setState+setInterval 会每 120ms 触发整棵树 rerender，
 * 导致 StreamingBlock / InputBox 等兄弟组件频繁重绘 → 终端追加新行而非原地刷新）。
 * 用固定字符代替，stage_change 事件本身已足够表达"正在工作"。
 */
function useSpinnerFrame() {
    return '◉';
}
export function ProgressPanel({ progressStage, runningTools, turnTokens, turnElapsedMs, turnStep, pluginProgress, }) {
    // spinner hook 必须无条件调用（React Hooks 规则），早 return 放在 hook 之后
    const spinner = useSpinnerFrame();
    // idle 时整个面板不渲染
    if (progressStage === 'idle') {
        return null;
    }
    const stageLabel = STAGE_LABELS[progressStage];
    const elapsedSec = (turnElapsedMs / 1000).toFixed(1);
    const tokensStr = turnTokens.toLocaleString();
    // 头行的"主描述"：有工具用 friendly，无工具用 stage label
    let mainDescription;
    if (runningTools.length > 0) {
        const first = runningTools[0];
        mainDescription =
            first.argsFriendly && first.argsFriendly.length > 0
                ? first.argsFriendly
                : `${first.toolName}(${truncateTail(first.argsPreview, TOOL_ARGS_MAX)})`;
        if (runningTools.length > 1) {
            mainDescription += ` +${runningTools.length - 1} more`;
        }
    }
    else {
        mainDescription = stageLabel;
    }
    // 头行尾部的附加信息：耗时 / token / step
    const stepHint = typeof turnStep === 'number' && turnStep > 0 ? ` · step ${turnStep}` : '';
    return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsxs(Text, { color: "cyan", children: [spinner, " "] }), _jsx(Text, { bold: true, children: mainDescription }), _jsx(Text, { color: "gray", children: ` · ${elapsedSec}s · ~${tokensStr} tokens${stepHint}` })] }), pluginProgress && (_jsx(Box, { children: _jsx(Text, { color: "magenta", children: `[plugin:${pluginProgress.pluginId}] ${pluginProgress.current}/${pluginProgress.max ?? '?'}${pluginProgress.message ? ` ${pluginProgress.message}` : ''}` }) }))] }));
}
