use crate::physics::orbit::EuropaOrbit;

pub fn libration_factor(true_anomaly_rad: f64) -> f64 {
    1.0 + 0.02 * true_anomaly_rad.sin()
}

pub fn orbital_energy_j_per_kg(orbit: EuropaOrbit, distance_m: f64) -> f64 {
    let speed = orbit.orbital_speed_m_s(distance_m);
    0.5 * speed.powi(2) - crate::physics::orbit::JUPITER_GRAVITATIONAL_PARAMETER / distance_m
}

pub fn resonance_offset_deg(orbit: EuropaOrbit, spin_period_s: f64) -> f64 {
    let orbital_period = orbit.orbital_period_s();
    360.0 * (spin_period_s - orbital_period) / orbital_period
}

pub fn laplace_resonance_check(
    io_period_s: f64,
    europa_period_s: f64,
    ganymede_period_s: f64,
) -> bool {
    let ratio_io_europa = europa_period_s / io_period_s;
    let ratio_europa_ganymede = ganymede_period_s / europa_period_s;
    (ratio_io_europa - 2.0).abs() < 0.05 && (ratio_europa_ganymede - 2.0).abs() < 0.05
}
