package UE03_170924_Map_Birthdays;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class UE03_Birthdays {
    public static void main(String[] args) {
        Path datei = Path.of("src/UE03_170924_Map_Birthdays/birthdays.txt");
        BirthdayDatamining birthdayDatamining = new BirthdayDatamining(datei);
        System.out.println("In \"HelloWorld!2\" sind folgende Zeichen" + new HashMap<>(zeichenStatistik("HelloWorld!2")));
        System.out.println("In der Datei \"birthdays.txt\" sind folgende Zeichen" + new HashMap<>(zeichenStatistik(datei)));
        testBirthday();
        System.out.println("Der Mittelwert ist: " + birthdayDatamining.arithmeticMiddle());
        System.out.println("Das häufigste Jahr ist: " + birthdayDatamining.mostCommonYear());
        System.out.println("Anzahl Geburtstage pro Monat" + birthdayDatamining.birthdaysPerMonth());
        System.out.println("Am 22. Mai haben " + birthdayDatamining.birthdaysOnDate(22, 5) + " Geburtstag");
        System.out.println("Am 24. Dezember haben " + birthdayDatamining.birthdaysOnDate(24, 12) + " Geburtstag");
        System.out.println("In einem Schaltjahr geboren: " + birthdayDatamining.leapYear());
        System.out.println("Der Jüngste hat Geburtstag am: " + birthdayDatamining.youngestBirthday());
        System.out.println("Der Älteste hat Geburtstag am: " + birthdayDatamining.oldestBirthday());
        System.out.println("Geburtstag des jüngsten Lehrers: " + birthdayDatamining.youngestTeacherYear());
        System.out.println("Es gibt " + birthdayDatamining.howManyTeacher() + " Lehrer");
        System.out.println("Der erste und Letzte Lehrer-Geburtstag ist: " + birthdayDatamining.teacherList().getFirst() + ", " + birthdayDatamining.teacherList().getLast());
        System.out.println("Der erste und Letzte Schüler-Geburtstag ist: " + birthdayDatamining.studentList().getFirst() + ", " + birthdayDatamining.studentList().getLast());
        System.out.println("Anzahl der Personen die sich einen Geburtstag teilen: " + birthdayDatamining.sameBirthday());
    }

    public static Map<Character, Double> zeichenStatistik(String text) {
        if (text == null) return new HashMap<>();
        Map<Character, Double> statistic = new HashMap<>();
        for (char letter : text.toCharArray()) statistic.put(letter, statistic.getOrDefault(letter, 0.0) + 1);
        return statistic;
    }

    public static Map<Character, Double> zeichenStatistik(Path datei) {
        if (datei == null) return new HashMap<>();
        Map<Character, Double> statistic = new HashMap<>();
        try {
            for (String line : Files.readAllLines(datei))
                for (char letter : line.toCharArray()) statistic.put(letter, statistic.getOrDefault(letter, 0.0) + 1);
        } catch (IOException e) {
            return new HashMap<>();
        }
        return statistic;
    }

    public static void testBirthday() {
        Set<Birthday> test = new TreeSet<>();
        Birthday test0 = new Birthday("01.02.3000");
        Birthday test1 = new Birthday("02.02.3000");
        Birthday test2 = new Birthday("02.02.3000");
        Birthday test3 = new Birthday("01.02.4000");
        test.add(test0);
        test.add(test1);
        test.add(test2);
        test.add(test3);
        System.out.println("Test von Sortieren: " + test);
    }
}
