///|
let default_message = "Hello from MoonBit!"

///|
fn message_from_args(args : Array[String]) -> String {
  let words = Array::new()
  for i in 1.. Array[String] {
  let lines = message.split("\n").map(line => line.to_owned()).to_array()
  if lines.is_empty() {
    [""]
  } else {
    lines
  }
}

///|
fn max_line_width(lines : Array[String]) -> Int {
  let mut width = 0
  for line in lines {
    let line_width = line.char_length()
    if line_width > width {
      width = line_width
    }
  }
  width
}

///|
fn pad_to_width(line : String, width : Int) -> String {
  line + " ".repeat(width - line.char_length())
}

///|
fn write_bubble_line(
  buf : StringBuilder,
  left : String,
  line : String,
  right : String,
  width : Int,
) -> Unit {
  buf.write_string(left)
  buf.write_string(" ")
  buf.write_string(pad_to_width(line, width))
  buf.write_string(" ")
  buf.write_string(right)
  buf.write_string("\n")
}

///|
fn render_cowsay(message : String) -> String {
  let lines = split_lines(message)
  let width = max_line_width(lines)
  let buf = StringBuilder()
  buf.write_string(" ")
  buf.write_string("_".repeat(width + 2))
  buf.write_string("\n")
  if lines.length() == 1 {
    write_bubble_line(buf, "<", lines[0], ">", width)
  } else {
    for i in 0.. {
      try! @miniio.stderr.write_text("cowsay failed: \{e}\n")
      @miniio.exit(1)
    }
  }
}