package Klausur.stream;

import java.util.*;
import java.util.stream.Collectors;


public class Main {

    public static void main(String[] args) {
        // Liste der Prüfungen
        List<Pruefung> pruefungen1 = new ArrayList<>();
        pruefungen1.add(new Pruefung("Mathematik", 5, "WS2023", 2.3));
        pruefungen1.add(new Pruefung("Programmierung", 6, "SS2023", 1.7));
        pruefungen1.add(new Pruefung("Betriebssysteme", 4, "WS2023", 3.0));

        List<Pruefung> pruefungen2 = new ArrayList<>();
        pruefungen2.add(new Pruefung("Mathematik", 5, "WS2023", 4.7)); // Nicht bestanden
        pruefungen2.add(new Pruefung("Programmierung", 6, "SS2023", 2.0));
        pruefungen2.add(new Pruefung("Datenbanken", 5, "WS2023", 3.3));

        // Liste der Studenten
        List<Student> studenten = new ArrayList<>();
        studenten.add(new Student("Anna Müller", "Berlin", "Informatik", pruefungen1));
        studenten.add(new Student("Max Meier", "Hamburg", "Wirtschaftsinformatik", pruefungen2));

        
        Map<String,List<Pruefung>> speicher = new HashMap<>();
//        speicher = studenten.stream()
//        .collect(Collectors.toMap(stu -> stu.getName(), p -> p.getPruefungen().stream().map(pr -> pr.toString()).collect(Collectors.toCollection(ArrayList::new))));
        
        System.out.println(speicher);
        
        
        for (Student s : studenten) {
        	if (!speicher.containsKey(s.getName()))
        		speicher.put(s.getName(), s.getPruefungen());
        	
        	else
        		speicher.get(s.getName()).add((Pruefung)s.getPruefungen());
        }
        
        System.out.println(speicher);
    }
}

class Student {
    private String name;
    private String wohnort;
    private String studiengang;
    private List<Pruefung> pruefungen;

    public Student(String name, String wohnort, String studiengang, List<Pruefung> pruefungen) {
        this.name = name;
        this.wohnort = wohnort;
        this.studiengang = studiengang;
        this.pruefungen = pruefungen;
    }

    public String getName() {
        return name;
    }

    public String getWohnort() {
        return wohnort;
    }

    public String getStudiengang() {
        return studiengang;
    }

    public List<Pruefung> getPruefungen() {
        return pruefungen;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", wohnort='" + wohnort + '\'' +
                ", studiengang='" + studiengang + '\'' +
                ", pruefungen=" + pruefungen +
                '}';
    }
}

class Pruefung {
    private String name;
    private int ectsZahl;
    private String semester;
    private double note;

    public Pruefung(String name, int ectsZahl, String semester, double note) {
        this.name = name;
        this.ectsZahl = ectsZahl;
        this.semester = semester;
        this.note = note;
    }

    public String getName() {
        return name;
    }

    public int getEctsZahl() {
        return ectsZahl;
    }

    public String getSemester() {
        return semester;
    }

    public double getNote() {
        return note;
    }

    @Override
    public String toString() {
        return "Pruefung{" +
                "name='" + name + '\'' +
                ", ectsZahl=" + ectsZahl +
                ", semester='" + semester + '\'' +
                ", note=" + note +
                '}';
    }
}

