package gfn.marc;

public class Picker {

    // dreidimensionales Array für Simulation des Lagers
    static int[][][] lager = new int[4][3][12];

    // Arrays "liste" und "fehler", wie in Aufgabe
    static int[][] liste = new int[4][4];
    static int[][] fehler = new int[4][4];

    // Position des Pickers
    static int aktuelleRegalNr;
    static int aktuelleEbeneNr;

    static int zeileF = 0;

    public static void main(String[] args) {

        // lager-Array füllen
        lager[0][0][0] = 434;
        lager[0][0][3] = 434;
        lager[2][2][11] = 189;
        lager[3][1][7] = 202; // FEHLER: hier sollte eigentlich Ware_ID 201 liegen

        // liste-Array füllen
        liste[0][0] = 434;
        liste[0][1] = 1;
        liste[0][2] = 1;
        liste[0][3] = 1;
        liste[1][0] = 434;
        liste[1][1] = 1;
        liste[1][2] = 1;
        liste[1][3] = 4;
        liste[2][0] = 189;
        liste[2][1] = 3;
        liste[2][2] = 3;
        liste[2][3] = 12;
        liste[3][0] = 201;
        liste[3][1] = 4;
        liste[3][2] = 2;
        liste[3][3] = 8;

        // Warenliste abarbeiten
        entnehmeWaren(liste);

        // Fehlerliste ausgeben
        System.out.println("\nFolgende Waren sind falsch eingelagert: ");
        for (int i = 0; i < fehler.length; i++) {
            if (fehler[i][1] != 0) {
                System.out.println("---------------------------");
                System.out.println("Ware-ID: " + fehler[i][0]);
                System.out.println("Regal: " + fehler[i][1]);
                System.out.println("Ebene: " + fehler[i][2]);
                System.out.println("Fach: " + fehler[i][3]);
            }
        }

    }

    static void entnehmeWaren(int[][] liste) {
        for (int i = 0; i < liste.length; i++) {
            int regalNr = liste[i][1];
            int ebeneNr = liste[i][2];
            int fachNr = liste[i][3];

            System.out.println("---------------------------");
            if (regalNr != aktuelleRegalNr) {
                fahreRegalAn(regalNr);
                fahreEbeneAn(ebeneNr);
            } else if (ebeneNr != aktuelleEbeneNr) {
                fahreEbeneAn(ebeneNr);
            }
            fahreFachAn(fachNr);

            if (pruefeWare(lager[regalNr - 1][ebeneNr - 1][fachNr - 1], i)) {
                entnehmeWare(regalNr, ebeneNr, fachNr);
            } else {
                System.out.println("Falsche Ware-ID!");
                kopiereZeile(liste, fehler, i, zeileF);
                zeileF++;
            }
        }

    }

    static void fahreRegalAn(int regalNr) {
        System.out.println("Picker fährt Regal " + regalNr + " an.");
        aktuelleRegalNr = regalNr;
    }

    static void fahreEbeneAn(int ebeneNr) {
        System.out.println("Picker fährt Ebene " + ebeneNr + " an.");
        aktuelleEbeneNr = ebeneNr;
    }

    static void fahreFachAn(int fachNr) {
        System.out.println("Picker fährt Fach " + fachNr + " an.");
    }

    static boolean pruefeWare(int ware_id, int zeileL) {   // Hier  musste ich zusätzlich die Zeile der Liste übergeben
        return ware_id == liste[zeileL][0];
    }

    static void entnehmeWare(int regalNr, int ebeneNr, int fachNr) {
        System.out.println("Ware " + lager[regalNr - 1][ebeneNr - 1][fachNr - 1] + " entnommen.");
        lager[regalNr - 1][ebeneNr - 1][fachNr - 1] = 0;
    }

    static void kopiereZeile(int[][] liste, int[][] fehler, int zeileL, int zeileF) {
        for (int i = 0; i < 4; i++) {
            fehler[zeileF][i] = liste[zeileL][i];
        }
    }
}

