<?php

$url = "https://"; // Hier URL zum SVWS Server eintragen

$schema = ""; // Hier Name des Schemas eintragen
$abschnitt = "1"; // Gueltige Abschnitts ID eintragen

$benutzer = ""; // Benutzername
$passwort = ""; // Passwort - darf nicht leer sein

$schulnummer = "123456"; // aktuell Fallback

// SchILD-Status
// 0 - Neuaufnahme
// 2 - Aktiv
// 6 - Externe
$Status = [2, 3, 6];

function sonderzeichen($string)
{
    $string = str_replace("ä", "ae", $string);
    $string = str_replace("ü", "ue", $string);
    $string = str_replace("ö", "oe", $string);
    $string = str_replace("Ä", "Ae", $string);
    $string = str_replace("Ü", "Ue", $string);
    $string = str_replace("Ö", "Oe", $string);
    $string = str_replace("ß", "ss", $string);
    $string = str_replace("´", "", $string);
    return $string;
}

function filterDatensaetze($data, $filterstatus)
{
    $aktiveDatensaetze = [];

    foreach ($data as $datensatz) {
        if (
            $datensatz["istDuplikat"] === false &&
            in_array($datensatz["status"], $filterstatus)
        ) {
            $aktiveDatensaetze[] = $datensatz;
        }
    }

    return $aktiveDatensaetze;
}

$klassen = [];
$kurse = [];
$orte = [];
$schueler = [];

$auth64 = base64_encode($benutzer . ":" . $passwort);

$time_start = microtime(true);


$curl = curl_init();

// Katalog Orte
curl_setopt_array($curl, [
    CURLOPT_URL => "$url/db/$schema/orte",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => ["authorization: Basic $auth64"],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $data = json_decode($response, true);

    foreach ($data as $row) {
        $orte[$row["id"]] = $row;
    }
}

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "$url/db/$schema/schueler/abschnitt/$abschnitt/auswahlliste",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => ["authorization: Basic $auth64"],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $data = json_decode($response, true);

    // Klassen vorbereiten
    foreach ($data["klassen"] as $row) {
        $klassen[$row["id"]] = $row;
    }

    // Kurse vorbereiten
    foreach ($data["kurse"] as $row) {
        $kurse[$row["id"]] = $row;
    }

    $Datensaetze = filterDatensaetze($data["schueler"], $Status);
}

foreach ($Datensaetze as $datensatz) {
    unset($datensatz["istDuplikat"]);
    unset($datensatz["kurse"]);
    unset($datensatz["idJahrgang"]);
    unset($datensatz["jahrgang"]);
    unset($datensatz["epJahre"]);
    unset($datensatz["abiturjahrgang"]);
    unset($datensatz["schulgliederung"]);
    unset($datensatz["idSchuljahresabschnitt"]);
    unset($datensatz["idSchuljahresabschnittSchueler"]);

    $datensatz["geburtsdatum"] = date(
        "d.m.Y",
        strtotime($datensatz["geburtsdatum"])
    );

    $datensatz["klasse"] = $klassen[$datensatz["idKlasse"]]["kuerzel"];
    unset($datensatz["idKlasse"]);

    if ($datensatz["externeSchulNr"]) {
        $datensatz["schulnummer"] = $datensatz["externeSchulNr"];
    } else {
        $datensatz["schulnummer"] = $schulnummer;
    }
    unset($datensatz["externeSchulNr"]);

    // Schueler Stammdaten holen
    curl_setopt_array($curl, [
        CURLOPT_URL => "$url/db/$schema/schueler/{$datensatz["id"]}/stammdaten/",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYHOST => 0,
        CURLOPT_SSL_VERIFYPEER => 0,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => ["authorization: Basic $auth64"],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        $stammdaten = json_decode($response, true);

        $datensatz["strasse"] = trim(
            $stammdaten["strassenname"] .
                " " .
                $stammdaten["hausnummer"] .
                $stammdaten["hausnummerZusatz"]
        );
        $datensatz["plz"] = $orte[$stammdaten["wohnortID"]]["plz"];
        $datensatz["ortAbk"] = $orte[$stammdaten["wohnortID"]]["ortsname"];
        $datensatz["telefon"] = $stammdaten["telefon"];

        $datensatz["aufnahmedatum"] = date(
            "d.m.Y",
            strtotime($stammdaten["aufnahmedatum"])
        );

        if ($stammdaten["emailPrivat"]) {
            $datensatz["email"] = $stammdaten["emailPrivat"];
        } else {
            $datensatz["email"] = null;
        }
    }

    if (is_null($datensatz["email"])) {
        //Schueler Erzieher holen
        curl_setopt_array($curl, [
            CURLOPT_URL => "$url/db/$schema/schueler/{$datensatz["id"]}/erzieher/",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => ["authorization: Basic $auth64"],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            $erzieher = json_decode($response, true);

            foreach ($erzieher as $erz) {
                if (
                    is_null($datensatz["email"]) &&
                    $erz["erhaeltAnschreiben"] == 1 &&
                    trim($erz["eMail"])
                ) {
                    $datensatz["email"] = trim($erz["eMail"]);
                }
            }
        }
    }

    echo ".";

    $schueler[] = $datensatz;
}

$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;

echo count($schueler)."\n";

echo 'Total Execution Time: '.number_format((float) $execution_time, 2)." Mins \n";

exit();
