use crate::domain::niseci::lessclone::CampionamentoNISECI;
use crate::domain::niseci::{IdSpecieNISECI, RiferimentoNISECI};
use std::collections::HashSet;
pub fn calculate_x1(campionamento: &CampionamentoNISECI, riferimento: &RiferimentoNISECI) -> f32 {
let mut set_specie_campionate: HashSet<IdSpecieNISECI> = HashSet::new();
for camp in campionamento {
set_specie_campionate.insert(camp.id());
}
let mut n_i: f32 = 0.0;
let mut n_a: f32 = 0.0;
for s_id in set_specie_campionate {
debug_assert!(riferimento.contains_plain_id(s_id));
let specie = riferimento
.get_ref_by_plain_id(s_id)
.expect("Riferimento should contain this id");
if specie.specie_attesa() {
if specie.tipo_autoctono() == 1 {
n_i += 1.0;
} else if specie.tipo_autoctono() == 2 {
n_a += 1.0;
}
}
}
let mut m_i: f32 = 0.0;
let mut m_a: f32 = 0.0;
for specie in riferimento {
if specie.specie_attesa() {
if specie.tipo_autoctono() == 1 {
m_i += 1.0;
} else if specie.tipo_autoctono() == 2 {
m_a += 1.0;
}
}
}
let x1 = (1.2 * n_i + 0.8 * n_a) / (1.2 * m_i + 0.8 * m_a);
(1000.0 * x1).round() / 1000.0
}