module observer.delivery.statiscticdisplay;

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

class StatisticsDisplay : Observer, DisplayElement
{
private:
    float maxTemp = 0.0f;
    float minTemp = 200;
    float tempSum= 0.0f;
    int numReadings;
public:
    this(WeatherData weatherData)
    {
        weatherData.registerObserver(this);
    }

    override void update(float temperature, float humidity, float pressure)
    {
        tempSum += temperature;
        numReadings++;

        if (temperature > maxTemp)
        {
            maxTemp = temperature;
        }

        if (temperature < minTemp)
        {
            minTemp = temperature;
        }

        display();
    }

    override void display()
    {
        writeln("Avg/Max/Min temperature = ", (tempSum / numReadings), '/', maxTemp, '/', minTemp);
        // writeln("Avg/Max/Min temperature = ".format(temperature), "F degrees and %3.1f%% humidity".format(humidity));
    }
}
