/*************************************************
 * ADS Praktikum 1.2
 * main.cpp
 *
 *************************************************/
#define CATCH_CONFIG_RUNNER
#include "Tree.h"
#include "catch.h"
#include <iostream>

using namespace std;

///////////////////////////////////////
// Hilfsmethoden fürs Menü hier:

/***************************
 ** Vorgegebene  Funktion **
 ***************************
   "mainscreen_addTreeCSV"

Importiert CSV Datei in bestehenden Baum.
Bei Aufruf in der main() Methode, muss der Pointer auf den Anker des Baums, als Parameter übergeben werden.
Es wird die im gleichen Verzeichnis liegende Datei "ExportZielanalyse.csv" geladen.
****************************/

void mainscreen_addTreeCSV(Tree*& ref) {
    char j;
    cout << "+ Moechten Sie die Daten aus der Datei ExportZielanalyse.csv "
        "importieren(j / n) ? >";
    cin >> j;
    if (j == 'j') {
        ifstream csvread;
        csvread.open("ExportZielanalyse.csv", ios::in);
        if (!csvread.is_open()) {
            cout << "Fehler beim Lesen!" << endl;
            return;
        }
        else {
            string name, age, postcode, income;

            while (!csvread.eof()) {
                getline(csvread, name, ';');
                getline(csvread, age, ';');
                getline(csvread, income, ';');
                getline(csvread, postcode, '\n');
                ref->addNode(name, stoi(age), stod(income), stoi(postcode));
            }
            csvread.close();
        }
        cout << "+ Daten wurden dem Baum hinzugefuegt." << endl;
    }
}

int main() {

    int result = Catch::Session().run();

    Tree* Baum = new Tree();
    int engb;

    while(true){
        cout << "====================================\n"
            "1) Datensatz einfuegen, manuell\n"
            "2) Datensatz einfuegen, CSV Datei\n"
            "3) Datensatz loeschen\n"
            "4) Suchen\n"
            "5) Datenstruktur anzeigen (pre, post, in)\n"
            "6) Level-Order anzeigen\n"
            "7) Beenden\n"
            "?> ";
        cin >> engb;
        switch (engb) {
            case 1: {
                string name;
                int alter;
                double einkommen;
                int plz;
                cout << "+ Bitte geben Sie die den Datensatz ein\n"
                    "Name ?> ";
                cin >> name;
                cout << "Alter ?> ";
                cin >> alter;
                cout << "Einkommen ?> ";
                cin >> einkommen;
                cout << "PLZ ?> ";
                cin >> plz;
                Baum->addNode(name, alter, einkommen, plz);
                cout << "+ Ihr Datensatz wurde eingefuegt" << endl;
                break;
            }
            case 2: {
                mainscreen_addTreeCSV(Baum);
                break;
            }
            case 3: {
                int nodeOrderID;
                cout << "+ Bitte geben Sie den zu loeschenden Datensatz an\n"
                    "OrderID ?> ";
                cin >> nodeOrderID;
                Baum->deleteNode(nodeOrderID);
                break;
            }
            case 4: {
                string name;
                cout << "+ Bitte geben Sie den zu suchenden Datensatz an\n"
                    "Name ?> ";
                cin >> name;
                cout << "+ Fundstellen:\n";
                Baum->searchNode(name);
                break;
            }
            case 5: {
                Baum->printAll();
                break;
            }
            case 6: {
                Baum->printLevelOrder();
                break;
            }
            case 7:{
                return 0;
            }
        }
    };
    system("PAUSE");

    return 0;
}
