use crate::time::{complement_within, Interval, ModifiedJulianDate};
use super::intervals::{self, LabeledCrossing};
pub(crate) fn assemble_above_threshold_periods(
labelled_crossings: &[LabeledCrossing],
window: Interval<ModifiedJulianDate>,
start_above: bool,
) -> Vec<Interval<ModifiedJulianDate>> {
intervals::build_above_periods_directed(labelled_crossings, window, start_above)
}
pub(crate) fn complement_threshold_periods(
window: Interval<ModifiedJulianDate>,
above_threshold_periods: &[Interval<ModifiedJulianDate>],
) -> Vec<Interval<ModifiedJulianDate>> {
complement_within(window, above_threshold_periods)
}
pub(crate) fn assemble_in_range_periods(
min_crossings: &[LabeledCrossing],
start_above_min: bool,
max_crossings: &[LabeledCrossing],
start_above_max: bool,
window: Interval<ModifiedJulianDate>,
) -> Vec<Interval<ModifiedJulianDate>> {
let above_min = assemble_above_threshold_periods(min_crossings, window, start_above_min);
let above_max = assemble_above_threshold_periods(max_crossings, window, start_above_max);
let below_max = complement_threshold_periods(window, &above_max);
intervals::intersect(&above_min, &below_max)
}