///|
/// Paired comparison between two HRV recordings.
pub(all) struct RecordingComparison {
  left_mean : Double
  right_mean : Double
  mean_delta : Double
  left_rmssd : Double
  right_rmssd : Double
  rmssd_delta : Double
  standardized_delta : Double
  agreement_bias : Double
  agreement_limits_lower : Double
  agreement_limits_upper : Double
  distance : Double
} derive(FromJson, ToJson, Debug, Eq)

///|
/// Calculate a paired comparison and Bland-Altman-style agreement limits.
pub fn compare_recordings(
  left : Array[Double],
  right : Array[Double],
) -> RecordingComparison {
  let n = if left.length() < right.length() {
    left.length()
  } else {
    right.length()
  }
  let left_prefix = []
  let right_prefix = []
  let differences = []
  for i in 0.. Double {
  let n = if left.length() < right.length() {
    left.length()
  } else {
    right.length()
  }
  if n == 0 {
    0.0
  } else {
    let differences = []
    for i in 0.. Double {
  let n = if left.length() < right.length() {
    left.length()
  } else {
    right.length()
  }
  if n == 0 {
    0.0
  } else {
    let limit = if tolerance < 0.0 { 0.0 } else { tolerance }
    let mut agreed = 0
    for i in 0.. Array[Double] {
  [
    comparison.left_mean,
    comparison.right_mean,
    comparison.mean_delta,
    comparison.left_rmssd,
    comparison.right_rmssd,
    comparison.rmssd_delta,
    comparison.standardized_delta,
    comparison.agreement_bias,
    comparison.agreement_limits_lower,
    comparison.agreement_limits_upper,
    comparison.distance,
  ]
}