///|
fn demo_input() -> String {
  "build: \u{1b}[32mPASS\u{1b}[0m\n" +
  "artifact: \u{1b}]8;;javascript:alert(1)\u{1b}\\click me\u{1b}]8;;\u{1b}\\\n" +
  "clipboard: \u{1b}]52;c;SGFja2VkIQ==\u{7}\n" +
  "rewrite: trusted\rforged\n" +
  "source: safe.mbt\u{202e}txt.exe\n"
}

///|
fn load_input(config : @cli.Config) -> String raise {
  if config.command == Demo {
    demo_input()
  } else {
    guard config.input is Some(input) else { fail("missing input text") }
    input
  }
}

///|
fn execute() -> Unit raise {
  let argv = @env.args()
  let config = match @cli.parse_config(argv[1:]) {
    Ok(config) => config
    Err(message) => fail("\{message}\n\n\{@cli.usage()}")
  }
  if config.command == Help {
    println(@cli.usage())
    return
  }
  let input = load_input(config)
  let result = @tp.audit(input, policy=config.policy)
  let rendered = @cli.render_source(config, input, result)
  match config.output {
    Some(_) =>
      fail(
        "--output requires the optional file-system adapter; print to stdout in this build",
      )
    None => println(rendered)
  }
  if config.command != Clean && config.command != Demo && result.failed {
    fail("audit threshold reached")
  }
}

///|
fn main {
  try! execute()
}