///|
/// Calculate morning trends and baseline parameters for a history of measurements.
pub fn calculate_morning_trends(
  history : Array[MorningMeasurement],
  window_size : Int,
  config : HrvConfig,
) -> Array[MorningTrend] {
  let n = history.length()
  let trends = []

  for i in 0.. upper {
      "High"
    } else {
      "Normal"
    }

    // Calculate recovery score out of 100
    let recovery_score = if today_rmssd < lower {
      let ratio = today_rmssd / lower
      let score = 80.0 * ratio
      if score < 0.0 {
        0.0
      } else {
        score
      }
    } else if today_rmssd > upper {
      // High RMSSD can indicate good recovery or parasympathetic hyperactivity/fatigue
      // We scale down slightly if it goes way above the upper limit
      let excess = today_rmssd - upper
      let score = 100.0 - excess / upper * 30.0
      if score < 70.0 {
        70.0
      } else {
        score
      }
    } else {
      // Normal range maps to 80.0 - 100.0
      let range_width = upper - lower
      if range_width > 0.0 {
        80.0 + (today_rmssd - lower) / range_width * 20.0
      } else {
        90.0
      }
    }

    trends.push({
      date: today.date,
      today_rmssd,
      rmssd_rolling_avg: rolling_avg,
      rmssd_rolling_sd: rolling_sd,
      rmssd_normal_range_lower: lower,
      rmssd_normal_range_upper: upper,
      rmssd_status: status,
      recovery_score,
    })
  }

  trends
}