
#include <print>
#include <fstream>
#include <string>

using namespace std::string_literals;

// Zu verarbeitende Datei mit Serienbrieftext
const std::string FILENAME = "../../04_Data/sbrief.txt"s;
// Steuerzeichen
const std::string CTRL_CHAR = "#%."s;

// main() Funktion
int main()
{

    // Datei öffnen
    std::string serienBrief;
    std::ifstream inFile(FILENAME);
    if (!inFile)
    {
        std::println("Fehler beim Oeffnen der Datei {}", FILENAME);
        return 1;
    }
    // Komplette Datei in einen string einlesen
    while (!inFile.eof())
    {
        std::string line;
        // Zeile aus Datei einlesen
        std::getline(inFile,line);
        // und an String anhängen
        serienBrief += line;
        // Zeilenvorschub anhängen
        serienBrief += '\n';
    }
    std::println("=== Orignal-Text war ===\n{}\n", serienBrief);

    // Eingelesenen Serienbrief durchlaufen
    std::string::size_type pos = 0;
    do
    {
        // Suche nach #, % oder .
        if (pos = serienBrief.find_first_of(CTRL_CHAR,pos); pos != std::string::npos)
        {
            switch (serienBrief[pos])
            {
            case '#':   // # durch Geschlecht ersetzen
                serienBrief.replace(pos, 1, "Frau");
                break;
            case '%':   // % durch Name ersetzen
                serienBrief.replace(pos, 1, "Maier");
                break;
            case '.':
                // Zeilenvorschub einfuegen und Leerzeichen entfernen
                serienBrief.insert(pos + 1, "\n");
                serienBrief.erase(pos + 2, 1);
                pos++;
                break;
            }
        }
    } while (pos != std::string::npos);
    // Grussformel anhängen
    serienBrief.append("\nMit freundlichen Gruessen\n");

    std::println("=== Serienbrief ist ===\n{}", serienBrief);

    return 0;
}
