use crate::asciigraph::{Bounds, Cell};
use crate::options::{Threshold};
use crate::AnsiColor;
pub(crate) fn render_thresholds(
plot: &mut Vec<Vec<Cell>>,
data: &[Vec<f64>],
bounds: &Bounds,
offset: usize,
thresholds: &[Threshold],
series_colors: &[AnsiColor],
) {
for t in thresholds {
if t.series_index >= data.len() {
continue;
}
let series = &data[t.series_index];
let series_finite: Vec<f64> = series.iter()
.filter(|v| v.is_finite())
.copied()
.collect();
if series_finite.is_empty() {
continue;
}
let series_min = series_finite.iter()
.copied()
.fold(f64::INFINITY, f64::min);
let series_max = series_finite.iter()
.copied()
.fold(f64::NEG_INFINITY, f64::max);
if t.value < series_min || t.value > series_max {
continue;
}
let effective_color = if t.color != AnsiColor::DEFAULT {
t.color
} else {
series_colors.get(t.series_index)
.copied()
.unwrap_or(AnsiColor::DEFAULT)
};
let scaled = (t.value * bounds.ratio).round() as isize - bounds.intmin2;
if scaled < 0 || scaled as usize > bounds.rows {
continue;
}
let row = bounds.rows - scaled as usize;
for col in offset..plot[row].len() {
if plot[row][col].text == " " {
plot[row][col].text = t.character.to_string();
plot[row][col].color = effective_color;
}
}
}
}