///|
/// Parsed CLI options (mirrors tokei's surface).
pub(all) struct Opts {
  paths : Array[String]
  mut format : @output.Format
  types : Array[String] // --type include filter (language keys)
  types_not : Array[String] // --type-not exclude filter
  excludes : Array[String]
  mut sort_key : String
  mut num_format : String
  mut num_format_explicit : Bool
  mut columns : Int32
  mut columns_explicit : Bool
  mut compact : Bool
  mut reverse : Bool
  mut hidden : Bool
  mut no_ignore : Bool
  mut no_ignore_dot : Bool
  mut no_ignore_vcs : Bool
  mut list_files : Bool // --files
  mut out_file : String? // --output-file extension; upstream -o selects format
  mut input_file : String? // --input reads an earlier JSON report
  mut list_langs : Bool // -l
  mut show_version : Bool
  mut show_help : Bool
}

///|
const VERSION = "0.1.0"

///|
fn usage() -> String {
  (
    $|TokeiMBT \{VERSION} — count code, comments and blanks across 300+ languages.
    $|A pure-MoonBit port of tokei (https://github.com/XAMPPRocky/tokei).
    $|
    $|USAGE:
    $|    tokei [FLAGS] [OPTIONS] [path]...
    $|
    $|ARGS:
    $|    ...                Files or directories to count (default: current directory)
    $|
    $|FLAGS:
    $|    -h, --help               Print this help message
    $|    -V, --version            Print version information
    $|    -l, --languages          Print supported languages and their extensions
    $|    -f, --files              Print individual file statistics
    $|    -C, --compact            Hide embedded-language details in the table
    $|        --hidden             Count hidden files
    $|        --no-ignore          Do not respect ignore files
    $|        --no-ignore-dot      Do not respect .ignore or .tokeignore
    $|        --no-ignore-vcs      Do not respect .gitignore
    $|        --no-progress        Compatibility flag (accepted, ignored)
    $|
    $|OPTIONS:
    $|    -o, --output     Output format: table, json, csv, yaml (default: table)
    $|        --output-file  Write output to FILE instead of stdout
    $|    -i, --input        Merge a previous JSON report (file path)
    $|    -t, --type        Only count the given languages (comma separated)
    $|    -T, --type-not    Count everything except the given languages
    $|    -e, --exclude   Ignore files/directories matching PATTERN (repeatable)
    $|    -n, --num-format