use std::fmt::Write as FmtWrite;
#[cfg(feature = "display")]
#[allow(dead_code)]
pub fn max_width(ascii_art: &str) -> usize {
ascii_art.lines().map(|line| line.chars().count()).max().unwrap_or(0)
}
#[cfg(feature = "display")]
#[allow(dead_code)]
pub fn frame(ascii_art: &str, padding: usize) -> String {
let lines: Vec<&str> = ascii_art.lines().collect();
let max_w = lines.iter().map(|l| l.chars().count()).max().unwrap_or(0);
let inner_width = max_w + padding * 2;
let mut result = String::new();
let _ = writeln!(result, "┌{}┐", "─".repeat(inner_width));
for line in &lines {
let line_chars = line.chars().count();
let pad_right = max_w - line_chars + padding;
let _ = writeln!(result, "│{}{}{}│", " ".repeat(padding), line, " ".repeat(pad_right));
}
let _ = write!(result, "└{}┘", "─".repeat(inner_width));
result
}
#[cfg(feature = "display")]
#[allow(dead_code)]
pub fn combine_horizontal(left: &str, right: &str, left_visual_width: usize, spacing: usize) -> String {
let left_lines: Vec<&str> = left.lines().collect();
let right_lines: Vec<&str> = right.lines().collect();
let max_height = left_lines.len().max(right_lines.len());
let blank_left = " ".repeat(left_visual_width);
let mut result = String::new();
for i in 0..max_height {
let left_line = left_lines.get(i).copied().unwrap_or(&blank_left);
let right_line = right_lines.get(i).copied().unwrap_or("");
let gap = " ".repeat(spacing);
if left_lines.get(i).is_some() {
let _ = writeln!(result, "{left_line}{gap}{right_line}");
} else {
let _ = writeln!(result, "{blank_left}{gap}{right_line}");
}
}
result
}