///|
pub fn library_version() -> String {
  "0.3.0"
}

///|
pub fn library_name() -> String {
  "moonbit-counterpoint"
}

///|
pub fn supported_species() -> Array[Species] {
  [First, Second, Third, Fourth, Fifth]
}

///|
pub fn supported_rule_count() -> Int {
  9
}

///|
pub fn supported_profile_count() -> Int {
  valid_profiles().length()
}

///|
pub fn production_features() -> Array[String] {
  [
    "counterpoint-analysis", "timeline-validation", "rhythm-analysis", "contour-analysis",
    "candidate-generation", "explainable-reports", "practice-plans", "quality-gates",
    "interchange",
  ]
}

///|
pub fn health_summary() -> String {
  "\{library_name()} \{library_version()} supports \{supported_rule_count()} rules and \{supported_profile_count()} profiles"
}

///|
pub fn has_feature(name : String) -> Bool {
  for feature in production_features() {
    if feature == name {
      return true
    }
  }
  false
}

///|
pub fn feature_count() -> Int {
  production_features().length()
}

///|
pub fn package_ready() -> Bool {
  library_version() != "" && supported_rule_count() > 0 && feature_count() > 0
}

///|
pub fn ready_message() -> String {
  if package_ready() {
    "package ready"
  } else {
    "package incomplete"
  }
}

///|
pub fn species_count() -> Int {
  supported_species().length()
}