module observer.delivery.forecastdisplay;

import observer.delivery.displayelement;
import observer.delivery.observer;
import observer.delivery.weatherdata;
import std.stdio : write, writeln;
import std.format : format;

class ForecastDisplay : Observer, DisplayElement
{
private:
    float currentPressure = 29.92f;
    float lastPressure;
public:
    this(WeatherData weatherData)
    {
        weatherData.registerObserver(this);
    }

    override void update(float temperature, float humidity, float pressure)
    {
        lastPressure = currentPressure;
        currentPressure = pressure;
        display();
    }

    override void display()
    {
        write("Forecast: ");
        if (currentPressure > lastPressure) {
			writeln("Improving weather on the way!");
		} else if (currentPressure == lastPressure) {
			writeln("More of the same");
		} else if (currentPressure < lastPressure) {
			writeln("Watch out for cooler, rainy weather");
		}
    }
}
