///|
pub(all) enum Profile {
  ChineseClinical
  EnglishClinical
  HighPrecision
  AllBuiltins
} derive(Debug, Eq)

///|
fn rule_has_prefix(rule : Rule, prefix : String) -> Bool {
  rule.id.has_prefix(prefix)
}

///|
pub fn profile_rules(profile : Profile) -> Array[Rule] {
  let rules = comprehensive_rules()
  match profile {
    AllBuiltins => rules
    ChineseClinical =>
      rules.filter(fn(rule) {
        rule_has_prefix(rule, "cn_") ||
        rule.id == "iso_date" ||
        rule.id == "email" ||
        rule.id == "mrn_context" ||
        rule.id == "insurance_context" ||
        rule.id == "hospital_context" ||
        rule.id == "address_context"
      })
    EnglishClinical =>
      rules.filter(fn(rule) {
        rule_has_prefix(rule, "en_") ||
        rule.id == "us_phone" ||
        rule.id == "iso_date" ||
        rule.id == "email" ||
        rule.id == "mrn_context" ||
        rule.id == "insurance_context" ||
        rule.id == "hospital_context" ||
        rule.id == "address_context"
      })
    HighPrecision => rules.filter(fn(rule) { rule.confidence >= 90 })
  }
}