use supernovas::{Accuracy, CatalogEntry, Frame, Observer, ReferenceSystem, Time};
fn main() -> Result<(), Box<dyn core::error::Error>> {
let vega = CatalogEntry::icrs("Vega", "18:36:56.336".parse()?, "+38:47:01.28".parse()?)?;
let altair = CatalogEntry::icrs("Altair", "19:50:46.999".parse()?, "+08:52:05.96".parse()?)?;
let time = Time::from_tt_jd(2_460_676.5, 37, 0.0)?;
let frame = Frame::new(Accuracy::Reduced, &Observer::Geocenter, &time)?;
let vega_app = vega.apparent_in(&frame, ReferenceSystem::Cirs)?;
let altair_app = altair.apparent_in(&frame, ReferenceSystem::Cirs)?;
let vega_eq = vega_app.equatorial();
let altair_eq = altair_app.equatorial();
println!("── Equatorial (CIRS at J2025.0) ─────────────────────────────");
println!(" Vega {vega_eq}");
println!(" Altair {altair_eq}");
let sep = vega_eq.distance_to(altair_eq);
println!("\n── Angular separation ────────────────────────────────────────");
println!(
" Vega ↔ Altair: {:.4}° ({:.2} arcmin)",
sep.deg(),
sep.arcmin()
);
let vega_app_j2000 = vega.apparent_in(&frame, ReferenceSystem::J2000)?;
let vega_ecl = vega_app_j2000.ecliptic(Accuracy::Reduced)?;
println!("\n── Ecliptic (J2000) ──────────────────────────────────────────");
println!(" Vega {vega_ecl}");
let vega_gal = vega_app.galactic(Accuracy::Reduced)?;
println!("\n── Galactic ──────────────────────────────────────────────────");
println!(" Vega {vega_gal}");
Ok(())
}