/** @param args */
  public static void main(String[] args) {
    /* benötigte Listen um manuell einen baum zu erstellen
     * */
    List<String> decisions = new LinkedList<String>();
    List<Entry<Integer, Integer>> next_decisions = new LinkedList<Entry<Integer, Integer>>();
    List<String> conclusions = new LinkedList<String>();
    List<String> parameters = new LinkedList<String>();

    /*zum parsen der parameter aus der csv*/
    List<List<String>> params;

    System.out.println(
        "\n------------------------Von Hand erstellter Decision Tree---------------------------------------\n");
    // reihenfolge decisions wichtig unten für die übergänge, reihenfolge der parameter muss die
    // hier vorgegebene reihenfolge haben.
    DecisionTree TestTree = new DecisionTree(8, 8);
    TestTree.setParameter("test", 1);
    decisions.add("$1==J");
    TestTree.setParameterDescription(
        1, "Boolean: variable die anzeigt ob das Bild selbst erstellt wurde (J/N)");
    TestTree.setDecisionDescription(1, "Hast du das bild Selbst erstellt?");
    decisions.add("$2==J");
    TestTree.setParameterDescription(
        2,
        "Boolean: variable die anzeigt ob das Bild unter einer freien Lizenz veröffenlicht werdne soll (J/N)");
    TestTree.setDecisionDescription(2, "Willst du es unter einer freien Lizenz veröffenlichen?");
    decisions.add("$3>100");
    TestTree.setParameterDescription(3, "Integer: Das Alter des Bildes (J/N)");
    TestTree.setDecisionDescription(3, "Ist das Bild älter als 100 Jahre?");
    decisions.add("$4==J");
    TestTree.setParameterDescription(4, "Boolean: Urheber bekannt? (J/N)");
    TestTree.setDecisionDescription(4, "Ist der Urheber des Bildes bekannt?");
    decisions.add("$5==J");
    TestTree.setParameterDescription(5, "Boolean: Bildrechte dritter Auszuschließen? (J/N)");
    TestTree.setDecisionDescription(5, "Sind Bildrechte dritter Auszuschließen?");
    decisions.add("$6>70");
    TestTree.setParameterDescription(6, "Integer: vor wieviel Jahren ist der Urheber verstorben?");
    TestTree.setDecisionDescription(6, "Ist der Urheber vor mehr als 70 Jahren verstorben?");
    decisions.add("$7==J");
    TestTree.setParameterDescription(7, "Boolean: Einverständnis aller betroffenen? (J/N)");
    TestTree.setDecisionDescription(7, "Hast du das Einverständnis aller betroffenen?");
    decisions.add("$8==J");
    TestTree.setParameterDescription(8, "Boolean: Zustimmung des Urhebers? (J/N)");
    TestTree.setDecisionDescription(
        8, "Hat der Urheber zugestimmt das Bild unter eine freie Lizenz zu stellen?");
    TestTree.setDecisions(decisions);
    conclusions.add("hochladen");
    conclusions.add("nicht hochladen");
    TestTree.setConclusions(conclusions);
    // übergänge: indizies der nächsten decisions bei oben angegebener reihenfolge (start bei 1)
    // negative zahlen: der betrag ist der index einer conclusion, auch hier reihenfolge beachten
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(3, 2));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(-2, 5));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(4, -1));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(-2, 6));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(7, -1));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(8, 5));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(-2, -1));
    next_decisions.add(new AbstractMap.SimpleEntry<Integer, Integer>(-2, -1));
    TestTree.setNext_decisions(next_decisions);
    // parameter müssen in der oben angegeben reihenfolge hinzugefügt werden.
    parameters.add("N");
    parameters.add("J");
    parameters.add("70");
    parameters.add("J");
    parameters.add("N");
    parameters.add("80");
    parameters.add("N");
    parameters.add("J");

    System.out.println(
        TestTree.conclude_verbose(parameters.toArray(new String[parameters.size()])));

    // hier das gleiche setup wie oben, bloß die konfigurations für den baum aus der csv geparst und
    // statt J/N eben 1/0
    // keine descriptions
    System.out.println(
        "\n---------------------------Aus der csv geparste Decision trees------------------------------------\n");
    TestTree = Parser.parseTreeCsv(".\\bild.csv");
    parameters = new LinkedList<String>();
    parameters.add("0");
    parameters.add("1");
    parameters.add("70");
    parameters.add("1");
    parameters.add("0");
    parameters.add("80");
    parameters.add("0");
    parameters.add("1");
    System.out.println(
        TestTree.conclude_verbose(parameters.toArray(new String[parameters.size()])));

    int caseno = 1;
    // alles aus der csv geparst
    System.out.println(
        "\n-------------------------------Aus der csv geparster Decision tree und geparste parameter------------------------\n");
    System.out.println("\n--------Bild---------\n");
    params = Parser.parseParameters(".\\bild_cases.csv");
    for (List<String> param : params) {
      System.out.println("Case " + caseno + ": " + TestTree.conclude(param));
      caseno++;
    }
    caseno = 1;
    System.out.println("\n--------Bewerber--------\n");
    TestTree = Parser.parseTreeCsv(".\\bewerber.csv");
    params = Parser.parseParameters(".\\bewerber_cases.csv");
    for (List<String> param : params) {
      // System.out.println(TestTree.conclude_verbose(param.toArray(new String[param.size()])));
      System.out.println("Case " + caseno + ": " + TestTree.conclude(param));
      caseno++;
    }
    caseno = 1;
    System.out.println("\n--------Kunde--------\n");
    TestTree = Parser.parseTreeCsv(".\\kunde.csv");
    params = Parser.parseParameters(".\\kunde_cases.csv");
    for (List<String> param : params) {

      System.out.println(
          "Case "
              + caseno
              + ": "
              + TestTree.conclude_verbose(param.toArray(new String[param.size()])));
      System.out.println("\n----------------\n");
      //	System.out.println(TestTree.conclude_(param));
      caseno++;
    }
    caseno = 1;
    System.out.println("\n--------Gehalt--------\n");
    TestTree = Parser.parseTreeCsv(".\\gehalt.csv");
    params = Parser.parseParameters(".\\gehalt_cases.csv");
    for (List<String> param : params) {

      System.out.println(
          "Case "
              + caseno
              + ": "
              + TestTree.conclude_verbose(param.toArray(new String[param.size()])));
      System.out.println("\n----------------\n");
      //	System.out.println(TestTree.conclude_(param));
      caseno++;
    }
  }