#include <print>
#include <fstream>
#include <string>
#include <algorithm>
#include <array>

// Dateiname
constexpr const char* FILENAME = "../../04_Data/swr1_hitparade.csv";
// Anzahl der auszuwertenden Eintraege
const int MAX_ENTRIES = 10;
// Anzahl der Hitparaden-Jahre
const int NO_YEARS = 26;

// Eigenschaften eines Hitparaden-Eintrags
struct Entry
{
    std::string title;
    std::string artist;
    std::array<std::string, NO_YEARS> pos;
};
// Hitparaden-Jahre (aus Spaltenueberschriften)
std::string years[NO_YEARS];

int main()
{
    std::string data;   // Eingelesenes Datum
    Entry entry;        // Hitparaden-Eintrag

    // Datei oeffnen
    std::ifstream infile(FILENAME);
    if (!infile)
    {
        std::println("Kann Datei {} nicht oeffnen!", FILENAME);
        exit(1);
    }

    // In der Spaltenueberschrift Titel+Interpret ueberspringen
    std::getline(infile, data, ';');
    std::getline(infile, data, ';');
    // Jahreszahlen einlesen
    // Achtung! Letzter Eintrag in der Tabelle
    // hat kein abschliessendes Semikolon
    for (auto index = 0; index < NO_YEARS - 1; index++)
        std::getline(infile, years[index], ';');
    std::getline(infile, years[NO_YEARS - 1]);

    // Nun MAX_ENTRIES Eintraege einlesen
    for (auto index = 0; index < MAX_ENTRIES; index++)
    {
        // Titel+Interpret einlesen
        std::getline(infile, entry.title, ';');
        std::getline(infile, entry.artist, ';');
        // Alle Positionen einlesen
        for (auto pindex = 0; pindex < NO_YEARS - 1; pindex++)
            std::getline(infile, entry.pos[pindex], ';');
        std::getline(infile, entry.pos[NO_YEARS - 1]);
        // Suche die hoechste und niedrigste Platzierung
        auto minMax = std::ranges::minmax(entry.pos);
        std::println("'{}' von '{}': min: {}, max:{}",
            entry.title, entry.artist, minMax.min, minMax.max);
    }

    // Datei wieder schliessen
    infile.close();
}
