///|
pub enum ReportChange {
  TitleChanged
  SummaryChanged
  InputsChanged
  AssumptionsChanged
  FormulasChanged
  ResultsChanged
  WarningsChanged
  SourcesChanged
} derive(Debug, Eq)

///|
pub fn compare_reports(
  left : ChemReport,
  right : ChemReport,
) -> Array[ReportChange] {
  let changes : Array[ReportChange] = []
  if left.title != right.title {
    changes.push(TitleChanged)
  }
  if left.summary != right.summary {
    changes.push(SummaryChanged)
  }
  if left.inputs != right.inputs {
    changes.push(InputsChanged)
  }
  if left.assumptions != right.assumptions {
    changes.push(AssumptionsChanged)
  }
  if left.formulas != right.formulas {
    changes.push(FormulasChanged)
  }
  if left.results != right.results {
    changes.push(ResultsChanged)
  }
  if left.warnings != right.warnings {
    changes.push(WarningsChanged)
  }
  if left.sources != right.sources {
    changes.push(SourcesChanged)
  }
  changes
}

///|
pub fn change_text(change : ReportChange) -> String {
  match change {
    TitleChanged => "title"
    SummaryChanged => "summary"
    InputsChanged => "inputs"
    AssumptionsChanged => "assumptions"
    FormulasChanged => "formulas"
    ResultsChanged => "results"
    WarningsChanged => "warnings"
    SourcesChanged => "sources"
  }
}