///|
fn print_result(name : String, input : String, note : String) -> Unit {
  let result = @guard.scan(input)
  println("== \{name} ==")
  println("case: \{note}")
  println("safe text: \{result.text()}")
  println("removed: \{result.removed_count()}")
  println(
    "severity: dangerous=\{result.dangerous_count()}, warning=\{result.warning_count()}, info=\{result.info_count()}",
  )
  println("risk: \{result.risk_level()} (score=\{result.risk_score()})")
  if result.is_safe() {
    println("decision: display is allowed after sanitizing")
  } else {
    println("decision: block or review before display")
  }
  for finding in result.findings() {
    println(
      "  - \{finding.kind().label()} [\{finding.severity().label()}] offset \{finding.offset()}: \{finding.message()}",
    )
  }
}

///|
fn print_policy_demo() -> Unit {
  let input = "deploy: \u{1b}[1;32mOK\u{1b}[0m with trusted styling"
  let strict = @guard.scan(input)
  let styled = @guard.scan_with_policy(input, @guard.Policy::styled())
  println("== policy comparison ==")
  println("strict text: \{strict.text()}")
  println("strict removed: \{strict.removed_count()}")
  println("styled text: \{styled.text()}")
  println("styled removed: \{styled.removed_count()}")
}

///|
fn print_report_demo() -> Unit {
  let input = "agent output: \u{1b}[31mFAIL\u{1b}[0m\u{1b}]52;c;secret\u{07}"
  let result = @guard.scan(input)
  println("== audit report ==")
  println(result.audit_report())
}

///|
fn main {
  println("MoonAnsi Guard demo")
  println("Input: untrusted terminal output")
  println("Output: safe text + structured audit findings")
  println("")
  let samples = [
    (
      "colored build log", "\u{1b}[31mERROR\u{1b}[0m: build failed", "ANSI SGR color and reset sequences",
    ),
    (
      "clipboard write", "output\u{1b}]52;c;SGVsbG8=\u{07}done", "OSC 52 may write attacker-controlled data to the clipboard",
    ),
    (
      "hidden hyperlink", "\u{1b}]8;;https://evil.example\u{07}click here\u{1b}]8;;\u{07}",
      "OSC 8 can hide the real link target behind harmless text",
    ),
    (
      "window title spoof", "\u{1b}]2;trusted session\u{07}normal output", "OSC 0/2 can rename terminal titles and mislead operators",
    ),
    (
      "cursor and screen rewrite", "line one\u{1b}[2A\u{1b}[2Kline two", "CSI cursor movement and erase commands can rewrite visible logs",
    ),
    (
      "log rewrite", "FAILED\rPASSED\b!", "carriage return and backspace can make logs visually misleading",
    ),
    (
      "private terminal payload", "safe\u{1b}Pprivate-data\u{1b}\\tail", "DCS payloads can trigger terminal-specific behavior",
    ),
    (
      "truncated escape", "prefix\u{1b}]52;c;payload", "unterminated sequences are treated as dangerous malformed input",
    ),
  ]
  for sample in samples {
    let (name, input, note) = sample
    print_result(name, input, note)
    println("")
  }
  print_policy_demo()
  println("")
  print_report_demo()
}