'use strict';

/**
 * render.js
 * ─────────────────────────────────────────
 * 通用渲染工具
 *
 * W 改为动态读取终端宽度（getW），每次 render 时实时计算，
 * 支持终端窗口 resize 后自动适配。
 */

const chalk = require('chalk');

/**
 * 获取当前终端宽度（限制在 50~80 之间）
 */
function getW() {
  const cols = process.stdout.columns;
  if (!cols || cols < 50) return 66; // 无法获取或过窄时使用默认值
  return Math.min(cols - 2, 80);
}

function hr(char = '─', w) {
  return char.repeat(w || getW());
}

function cls() {
  process.stdout.write('\x1b[2J\x1b[H');
}

/**
 * 多行文本缩进
 */
function indent(text, prefix = '  ') {
  return text.split('\n').map(l => prefix + l).join('\n');
}

/**
 * 步骤状态标签
 */
const BADGE = {
  check:   () => chalk.bgCyan.black('  查看  '),
  pending: () => chalk.bgGray.white(' 未执行 '),
  done:    () => chalk.bgGreen.black(' ✓ 完成 '),
  error:   () => chalk.bgRed.white('  ✗ 失败  '),
  submenu: () => chalk.bgMagenta.white(' ▸ 子向导 '),
  input:   () => chalk.bgYellow.black(' 填参数 '),
};

/**
 * 渲染命令行（自动折行）
 */
function renderCommand(display) {
  if (!display) return;
  const W = getW();
  const maxLen = W - 10;

  if (display.length <= maxLen) {
    console.log('  ' + chalk.bgBlack.cyan(' $ ') + chalk.bgBlack.white(' ' + display + ' '));
    return;
  }

  // 按空格拆词后贪心折行
  const words = display.split(' ');
  const lines = [];
  let   cur   = '';

  for (const word of words) {
    const next = cur ? cur + ' ' + word : word;
    if (next.length > maxLen && cur) {
      lines.push(cur);
      cur = word;
    } else {
      cur = next;
    }
  }
  if (cur) lines.push(cur);

  lines.forEach((line, i) => {
    const prefix = i === 0
      ? chalk.bgBlack.cyan(' $ ')
      : chalk.bgBlack.dim('   ');
    console.log('  ' + prefix + chalk.bgBlack.white(' ' + line + ' '));
  });
}

module.exports = { getW, hr, cls, indent, BADGE, renderCommand };
