pub struct TimeScale {
    pub factor: f64,
}

impl TimeScale {
    pub fn new(factor: f64) -> Self {
        Self {
            factor: factor.max(0.0),
        }
    }

    pub fn realtime() -> Self {
        Self { factor: 1.0 }
    }

    pub fn solar_day_per_second() -> Self {
        Self {
            factor: crate::SOLAR_DAY_S,
        }
    }

    pub fn year_per_second() -> Self {
        Self {
            factor: 7_600_521.6,
        }
    }

    pub fn apply(&self, dt_s: f64) -> f64 {
        dt_s * self.factor
    }

    pub fn set_factor(&mut self, factor: f64) {
        self.factor = factor.max(0.0);
    }

    pub fn pause(&mut self) {
        self.factor = 0.0;
    }

    pub fn is_paused(&self) -> bool {
        self.factor == 0.0
    }
}
