use crate::calculus::altitude::CrossingDirection;
use crate::time::{ModifiedJulianDate, Period, MJD};
use qtty::*;
pub use crate::calculus::altitude::CrossingDirection as AzimuthCrossingDirection;
#[derive(Debug, Clone, Copy)]
pub struct AzimuthCrossingEvent {
pub mjd: ModifiedJulianDate,
pub direction: CrossingDirection,
}
impl std::fmt::Display for AzimuthCrossingEvent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Azimuth {} at {}", self.direction, self.mjd)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AzimuthExtremumKind {
Max,
Min,
}
impl std::fmt::Display for AzimuthExtremumKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Max => write!(f, "Max Azimuth"),
Self::Min => write!(f, "Min Azimuth"),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct AzimuthExtremum {
pub mjd: ModifiedJulianDate,
pub azimuth: Degrees,
pub kind: AzimuthExtremumKind,
}
impl std::fmt::Display for AzimuthExtremum {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} at {} (az: {})", self.kind, self.mjd, self.azimuth)
}
}
#[derive(Debug, Clone, Copy)]
pub struct AzimuthQuery {
pub observer: crate::coordinates::centers::Geodetic<crate::coordinates::frames::ECEF>,
pub window: Period<MJD>,
pub min_azimuth: Degrees,
pub max_azimuth: Degrees,
}