use crate::{Event, event::Status};

pub(crate) struct IncomingInfo {
    pub parton_id: [i32; 2],
    pub x: [f64; 2],
}

pub(crate) fn extract_inc_info(ev: &Event) -> IncomingInfo {
    let incoming = ev.particles.iter().filter(
        |p| p.status == Some(Status::Incoming)
    );
    let mut parton_id = [0, 0];
    let mut x = [0., 0.];
    for particle in incoming {
        let Some(p) = particle.p else {
            continue
        };
        let idx = if p[3] < 0. { 0 } else { 1 };
        parton_id[idx] = particle.id.map(|id| id.id()).unwrap_or_default();
        let beam = &ev.sample_info.beam[idx];
        if let Some(e) = beam.energy {
            x[idx] = p[0] / e;
        }
    }
    IncomingInfo { parton_id, x }
}
