// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2026 clbbbb

///|
pub fn compatible_for_distribution(text : String) -> Bool {
  compatibility_errors(text).is_empty()
}

///|
pub fn compatibility_errors(text : String) -> Array[String] {
  let errors : Array[String] = []
  match parse(text).expr {
    Some(expr) => {
      if contains_strong_copyleft(expr) && contains_public_domain_style(expr) {
        errors.push(
          "review strong copyleft combined with public-domain-style terms",
        )
      }
      if contains_string(licenses(expr), "CDDL-1.0") &&
        contains_strong_copyleft(expr) {
        errors.push("CDDL and GPL-style terms usually require manual review")
      }
      if contains_string(licenses(expr), "Apache-2.0") &&
        contains_string(licenses(expr), "GPL-2.0-only") {
        errors.push("Apache-2.0 is not normally compatible with GPL-2.0-only")
      }
      for id in licenses(expr) {
        if !is_known_license(id) {
          errors.push("unknown license blocks compatibility decision: " + id)
        }
      }
    }
    None => errors.push("parse error: " + parse(text).error)
  }
  errors
}

///|
pub fn compatibility_report(text : String) -> String {
  let errors = compatibility_errors(text)
  if errors.is_empty() {
    "ok"
  } else {
    join_lines(errors)
  }
}

///|
pub fn contains_strong_copyleft(expr : Expr) -> Bool {
  for id in licenses(expr) {
    if license_family(id) == "strong-copyleft" {
      return true
    }
  }
  false
}

///|
pub fn contains_public_domain_style(expr : Expr) -> Bool {
  for id in licenses(expr) {
    if license_family(id) == "public-domain-style" {
      return true
    }
  }
  false
}

///|
pub fn review_level(text : String) -> String {
  if !is_valid(text) {
    return "invalid"
  }
  let risk = highest_risk(text)
  if risk == "high" {
    "legal-review"
  } else if risk == "medium" {
    "maintainer-review"
  } else if !compatible_for_distribution(text) {
    "legal-review"
  } else {
    "fast-path"
  }
}