package gfn.marc;

import java.time.YearMonth;

public class Main {

    // Testdaten
    static int[][] zeiten = {
            {2, 480},
            {2, 1_040},
            {3, 470},
            {6, 480},
            {6, 960},
            {7, 990},
            {8, 480},
            {8, 960},
            {30, 990}
    };

    public static void main(String[] args) {
        int persnr = 12345;
        erzeugeListe(persnr, zeiten, 2013, 5);
    }

    // zu programmierende Methode
    static void erzeugeListe(int persnr, int[][] zeiten, int jahr, int monat) {

        int anwesenheitMonat = 0;
        schreibeKopfzeile(persnr, jahr, monat);
        for (int i = 0, tag = 1; tag <= tageImMonat(monat, jahr); ) {
            int min1 = -1;
            int min2 = -1;
            int anwesenheitTag = -1;
            String bemerkung = "";

            if (i < zeiten.length && zeiten[i][0] == tag) {
                min1 = zeiten[i][1];
            }
            if (i + 1 < zeiten.length && zeiten[i + 1][0] == tag) {
                min2 = zeiten[i + 1][1];
            }
            if (min1 == -1 ^ min2 == -1) {
                bemerkung = "eine Buchung fehlt";
                i++;
            }
            if (min1 != -1 && min2 != -1) {
                anwesenheitTag = min2 - min1;
                anwesenheitMonat += anwesenheitTag;
                i += 2;
            }
            if (min1 == -1 && min2 == -1)
                bemerkung = "nicht anwesend";


            schreibeZeile(tag, min1, min2, anwesenheitTag, bemerkung);
            tag++;
        }

        schreibeFusszeile(anwesenheitMonat);

    }

    // gegebene Methoden
    static int tageImMonat(int monat, int jahr) {
        YearMonth yearMonth = YearMonth.of(jahr, monat);
        return yearMonth.lengthOfMonth();
    }

    static void schreibeKopfzeile(int persnr, int jahr, int monat) {
        String[] monate = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September",
                "Oktober", "November", "Dezember"};
        System.out.println("\nMitarbeiter: " + persnr + "                             " + monate[monat + 1] + " " + jahr + "\n");
        System.out.println("Tag  Kommen   Gehen    Anwesenheit    Bemerkung");
        System.out.println("========================================================");
    }

    static void schreibeZeile(int tag, int min1, int min2, int anwesenheitTag, String bemerkung) {
        String kommen = "       ";
        String gehen = "       ";
        String anwesenheit = "00:00";
        String tagString = tag < 10 ? " " + tag : "" + tag;
        if (min1 != -1) {
            int h = min1 / 60;
            int m = min1 % 60;
            String stunde = h < 10 ? "0" + h : "" + h;
            String minute = m < 10 ? "0" + m : "" + m;
            kommen = stunde + ":" + minute + "  ";
        }
        if (min2 != -1) {
            int h = min2 / 60;
            int m = min2 % 60;
            String stunde = h < 10 ? "0" + h : "" + h;
            String minute = m < 10 ? "0" + m : "" + m;
            gehen = stunde + ":" + minute + "  ";
        }
        if (anwesenheitTag != -1) {
            int h = anwesenheitTag / 60;
            int m = anwesenheitTag % 60;
            String stunde = h < 10 ? "0" + h : "" + h;
            String minute = m < 10 ? "0" + m : "" + m;
            anwesenheit = stunde + ":" + minute;
        }
        System.out.println(tagString + "   " + kommen + "  " + gehen + "  " + anwesenheit + "          " + bemerkung);
    }

    static void schreibeFusszeile(int anwesenheitMonat) {
        int h = anwesenheitMonat / 60;
        int m = anwesenheitMonat % 60;
        String stunde = h < 10 ? "0" + h : "" + h;
        String minute = m < 10 ? "0" + m : "" + m;
        System.out.println("========================================================");
        System.out.println("Summe Anwesenheit:     " + stunde + ":" + minute);
    }

}

