///|
pub fn version() -> String {
  "0.2.0"
}

///|
pub fn package_name() -> String {
  "ljlljl678/moonbit-deid"
}

///|
pub fn supported_modes() -> Array[String] {
  ["token", "preserve-length", "partial", "stable-hash"]
}

///|
pub fn supported_profiles() -> Array[String] {
  ["chinese-clinical", "english-clinical", "high-precision", "all-builtins"]
}

///|
pub fn supported_exports() -> Array[String] {
  ["text", "markdown", "json", "csv", "plain"]
}

///|
pub fn capabilities() -> Map[String, Bool] {
  {
    "regex_detection": true,
    "external_entities": true,
    "batch_processing": true,
    "streaming_chunks": true,
    "offset_mapping": true,
    "audit_export": true,
    "synthetic_benchmarks": true,
  }
}

///|
pub fn api_surface_summary() -> String {
  [
    "package=\{package_name()}",
    "version=\{version()}",
    "rules=\{comprehensive_rules().length()}",
    "modes=\{supported_modes().length()}",
    "profiles=\{supported_profiles().length()}",
    "exports=\{supported_exports().length()}",
  ].join("\n")
}

///|
pub fn redact_default(input : String) -> DeidResult raise DeidError {
  redact_clinical_note(input)
}

///|
pub fn scan_default(input : String) -> Array[Finding] raise DeidError {
  scan_clinical_note(input)
}

///|
pub fn audit_default(input : String) -> String raise DeidError {
  audit_to_json(redact_default(input).audit)
}

///|
pub fn redacted_text(input : String) -> String raise DeidError {
  redact_default(input).text
}

///|
pub fn redaction_offsets(input : String) -> Array[OffsetMap] raise DeidError {
  redact_default(input).offsets
}

///|
pub fn redaction_findings(input : String) -> Array[Finding] raise DeidError {
  redact_default(input).findings
}

///|
pub fn result_is_safe(input : String) -> Bool raise DeidError {
  let result = redact_default(input)
  output_contract_passes(input, result)
}

///|
pub fn capability_lines() -> Array[String] {
  let result = []
  for key, value in capabilities() {
    result.push("\{key}=\{value}")
  }
  result.sort()
  result
}

///|
pub fn rule_counts_report() -> String {
  let counts = rule_count_by_kind(comprehensive_rules())
  let lines = []
  for key, value in counts {
    lines.push("\{key}=\{value}")
  }
  lines.sort()
  lines.join("\n")
}

///|
pub fn supported_targets() -> Array[String] {
  ["wasm-gc", "native", "js"]
}

///|
pub fn source_policy_notice() -> String {
  "Rules and fixtures are deterministic engineering assets; review institution-specific policy before production use."
}