use std::f64::consts;
pub fn foliar_moisture_content(
lat: f64,
long: f64,
day_of_year: i32,
elev: Option<f64>,
date_of_minimum_fmc: Option<i32>,
) -> f64 {
let latn = if elev.is_some() {
43. + 33.7 * consts::E.powf(-0.0351 * (150. - long))
} else {
46. + 23.4 * consts::E.powf(-0.0360 * (150. - long))
};
let d0 = date_of_minimum_fmc.unwrap_or_else(|| {
if let Some(elev) = elev {
(142.1 * (lat / latn) + 0.0172 * elev).round() as i32
} else {
(151. * (lat / latn)).round() as i32
}
});
let nd = (day_of_year - d0).abs() as f64;
if nd < 30. {
85. + 0.0189 * nd.powi(2)
} else if (30. ..50.).contains(&nd) {
32.9 + 3.17 * nd - 0.0288 * nd.powi(2)
} else {
120.
}
}