use std::sync::Arc;
use tessarikv_constants::LEVELS;
use tessarikv_format::TableMeta;
use super::pick::{Busy, Pick, bytes_of};
pub(crate) fn pick(
levels: &[Vec<Arc<TableMeta>>; LEVELS],
max_table_bytes: u64,
busy: &Busy,
) -> Option<Pick> {
let level_zero = levels.first()?;
let mut kept = bytes_of(level_zero);
let mut dropped = Vec::new();
for table in level_zero.iter().rev() {
if kept <= max_table_bytes {
break;
}
kept = kept.saturating_sub(table.size);
dropped.push(Arc::clone(table));
}
(!dropped.is_empty())
.then_some(Pick {
output_level: 0,
inputs: dropped,
overlaps: Vec::new(),
drop: true,
})
.filter(|pick| busy.allows(pick))
}