import color from "picocolors";

// 计算字符串显示宽度（中文2，英文1）
function strWidth(str) {
  let width = 0;
  for (const char of str) {
    width += char.charCodeAt(0) > 127 ? 2 : 1;
  }
  return width;
}

// 大字效果框
export function bigText(text, options = {}) {
  const { 
    style = "double",
    textColor = "yellow",
    padding = 2,
  } = options;

  const chars = {
    block: { tl: "█", tr: "█", bl: "█", br: "█", h: "█", v: "█" },
    double: { tl: "╔", tr: "╗", bl: "╚", br: "╝", h: "═", v: "║" },
    simple: { tl: "┌", tr: "┐", bl: "└", br: "┘", h: "─", v: "│" },
  };
  
  const c = chars[style] || chars.double;
  const lines = text.split("\n");
  const maxWidth = Math.max(...lines.map(strWidth));
  const boxWidth = maxWidth + padding * 2;
  
  const result = [];
  result.push(c.tl + c.h.repeat(boxWidth) + c.tr);
  result.push(c.v + " ".repeat(boxWidth) + c.v);
  
  for (const line of lines) {
    const lineWidth = strWidth(line);
    const rightPad = maxWidth - lineWidth;
    result.push(c.v + " ".repeat(padding) + line + " ".repeat(rightPad + padding) + c.v);
  }
  
  result.push(c.v + " ".repeat(boxWidth) + c.v);
  result.push(c.bl + c.h.repeat(boxWidth) + c.br);
  
  const box = result.join("\n");
  return color[textColor] ? color[textColor](box) : box;
}
