<?php

session_start();

$db = new SQLite3('../db-test/test.db');

$action = $_GET["action"];
$meta = $_GET["meta"];

$bridgeName = $_SESSION["meta"];

$plug = json_decode(file_get_contents("../settings.json") , true)["plug"];


// Funktion zur Bereinigung des Formats
function cleanPinsArray(&$data) {
    // Überprüfen, ob das "pins"-Array vorhanden ist und es ein Array ist
    if (isset($data) && is_array($data)) {
        // Nur gültige Pins behalten
        $data = array_filter($data, function($pin) {
            // Sicherstellen, dass das Element nicht null ist und dass jedes Element im "pins"-Array genau 2 Einträge hat
            return is_array($pin) && count($pin) === 2 && is_integer($pin[0]) && is_integer($pin[1]);
        });

        // Neu indexieren, um die Indizes korrekt zu halten
        $data = array_values($data);
    }
}

switch ($action) {
    case "edit":

		$bridge_name = $bridgeName;

        $nodes = json_decode($meta, true); // Beispielwert
        $nodes = $nodes["pins"]; // Beispielwert
		
		cleanPinsArray($nodes); // Dies stellt sicher, dass Javscript valide Werte bringt und die Datenbank nicht verunreinigt wird.
		
        if (empty($nodes))
        {
            $message[0] = false;
            $message[1] = "Es wurden keine Änderungen gespeichert.";
            $message = json_encode($message);
            print ($message);
            die();
        }

		$db->exec("  DELETE FROM nodes WHERE required_by =  '" . $bridge_name  . "' and plug_id =  '" . $plug  . "'; ");

		foreach($nodes as $node) {
			$from = $node[0];
			$to = $node[1];
			$db->exec("  INSERT INTO nodes (required_by, node_from, node_to, plug_id) VALUES ('" . $bridge_name  . "', '" . $from  . "', '" . $to  . "', '" . $plug  . "');   ");
		}

		$message[0] = true;
		$message[1] = "Die Änderungen für die Brücke $bridgeName wurden gespeichert!";
		$message = json_encode($message);
		print ($message);
		die();


    break;

    case "add":

        // Eingabedaten
        $bridgeName = $bridgeName;
        $nodes = json_decode($meta, true);
        $name = $nodes["name"];
        $nodes = $nodes["pins"];
		
		cleanPinsArray($nodes); // Dies stellt sicher, dass Javscript valide Werte bringt und die Datenbank nicht verunreinigt wird.
		
		// sicherstellen, dass Werte gesetzt sind
        if (empty($nodes) || empty($name))
        {
            $message[0] = false;
            $message[1] = "Es wurden keine Änderungen gespeichert, da Parameter fehlten.";
            $message = json_encode($message);
            print ($message);
            die();
        }
		


		$result = $db->query("SELECT COUNT(*) as anzahl FROM bridges WHERE id = '" . $name . "';");
		$row = $result->fetchArray(SQLITE3_ASSOC);
		$number = $row['anzahl'];
		
		if($number > 0) {
			$message[0] = false;
			$message[1] = "Es gibt bereits eine Brücke, die " . $name . " heißt. Bitte einen anderen Namen wählen oder die andere Brücke " . $name . " löschen/bearbeiten. Stellen Sie zudem sicher, dass Sie den korrekten Steckertypen verwenden.";
			$message = json_encode($message);
			print ($message);
			die();
		}
		
		$db->exec("  INSERT INTO bridges (plug_id, id) VALUES (" . $plug  . ", '" . $name  . "');  ");
		
		foreach($nodes as $node) {
			$from = $node[0];
			$to = $node[1];
			$db->exec("  INSERT INTO nodes (required_by, node_from, node_to, plug_id) VALUES ('" . $name  . "', '" . $from  . "', '" . $to  . "', '" . $plug  . "');   ");
		}

		$message[0] = true;
		$message[1] = "Die Brücke $name wurde angelegt!";
		$message = json_encode($message);
		print ($message);
		die();
    break;

    case "remove":

        $bridge_name = $meta;

		$db->exec("  DELETE FROM nodes WHERE required_by =  '" . $bridge_name  . "' and plug_id =  '" . $plug  . "'; ");
		$db->exec("  DELETE FROM bridges WHERE id =  '" . $bridge_name  . "' and plug_id = '" . $plug  . "'; ");
		
		$message[0] = true;
		$message[1] = "Die Brücke $bridge_name wurde nun gelöscht.";
		$message = json_encode($message);
		print ($message);
		die();

    break;

}

