use std::collections::HashMap;
use crate::domain::niseci::{CampionamentoNISECI, RecordNISECI, RiferimentoNISECI, SpecieNISECI};
#[cfg(feature = "lessclone")]
pub mod lessclone;
pub fn calculate_x1(campionamento: &CampionamentoNISECI, riferimento: &RiferimentoNISECI) -> f32 {
let mut specie_campionate_map: HashMap<&str, &RecordNISECI> = HashMap::new();
for camp in campionamento {
if camp.specie_attesa() {
specie_campionate_map.entry(camp.id()).or_insert(camp);
}
}
let set_specie_campionate: Vec<&RecordNISECI> = specie_campionate_map.into_values().collect();
let mut n_i: f32 = 0.0;
let mut n_a: f32 = 0.0;
for spec in set_specie_campionate {
if spec.tipo_autoctono() == 1 {
n_i += 1.0;
} else if spec.tipo_autoctono() == 2 {
n_a += 1.0;
}
}
let mut specie_attese_map: HashMap<&str, &SpecieNISECI> = HashMap::new();
for specie in riferimento {
if specie.specie_attesa() {
specie_attese_map.entry(specie.id()).or_insert(specie);
}
}
let set_specie_attese: Vec<&SpecieNISECI> = specie_attese_map.into_values().collect();
let mut m_i: f32 = 0.0;
let mut m_a: f32 = 0.0;
for spec in set_specie_attese {
if spec.tipo_autoctono() == 1 {
m_i += 1.0;
} else if spec.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
}