#include <print>
#include <fstream>
#include <string>
#include <algorithm>
#include <array>
using namespace std::string_literals;

// 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;
};

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);
    }

    // Spaltenueberschrift ueberspringen
    std::getline(infile, data);

    // 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]);
        // Bestimme die Anzahl der Positionen
        auto numPos = std::ranges::count_if(entry.pos,
            [](const std::string& pos)
            { return pos != "0"s; }
        );
        std::println("{} Plaetze: '{}' von '{}'", numPos, entry.title, entry.artist);
    }

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