use crate::time::julian_date;
use chrono::{DateTime, Utc};
use std::f64::consts::PI;
pub fn sun_position(date: DateTime<Utc>) -> (f64, f64) {
let jd = julian_date(date);
let (earth_h, _earth_b) = erfars::ephemerides::Epv00(jd, 0.0);
let x = -earth_h[0]; let y = -earth_h[1]; let z = -earth_h[2];
let eps = erfars::precnutpolar::Obl06(jd, 0.0);
let cos_eps = eps.cos();
let sin_eps = eps.sin();
let y_ecl = y * cos_eps + z * sin_eps;
let z_ecl = -y * sin_eps + z * cos_eps;
let longitude_rad = y_ecl.atan2(x);
let r = (x * x + y_ecl * y_ecl + z_ecl * z_ecl).sqrt();
let latitude_rad = (z_ecl / r).asin();
let mut longitude = longitude_rad * 180.0 / PI;
if longitude < 0.0 {
longitude += 360.0;
}
let latitude = latitude_rad * 180.0 / PI;
(longitude, latitude)
}
pub fn sun_ra_dec(date: DateTime<Utc>) -> (f64, f64) {
let jd = julian_date(date);
let (earth_h, _earth_b) = erfars::ephemerides::Epv00(jd, 0.0);
let x = -earth_h[0];
let y = -earth_h[1];
let z = -earth_h[2];
let ra_rad = y.atan2(x);
let r = (x * x + y * y + z * z).sqrt();
let dec_rad = (z / r).asin();
let mut ra = ra_rad * 180.0 / PI;
if ra < 0.0 {
ra += 360.0;
}
let dec = dec_rad * 180.0 / PI;
(ra, dec)
}