<?php

// ===========================================================================================
// Analyse-Funktionen für die Spurkabelprüfung, Federleistenprüfung und Selbstidiagnose
// ===========================================================================================



//Übsersetzungstabelle (Intern -> Steckerpin, gilt für Programmsteckerprüfung)
$translationMap = [
    "0" => "18",
    "1" => "19",
    "2" => "20",
    "3" => "21",
    "4" => "22",
    "5" => "23",
    "6" => "24",
    "7" => "25",
    "8" => "10",
    "9" => "11",
    "10" => "12",
    "11" => "13",
    "12" => "14",
    "13" => "15",
    "14" => "16",
    "15" => "17",
    "16" => "34",
    "17" => "35",
    "18" => "36",
    "19" => "37",
    "20" => "38",
    "21" => "39",
    "22" => "40",
    "23" => "41",
    "24" => "26",
    "25" => "27",
    "26" => "28",
    "27" => "29",
    "28" => "30",
    "29" => "31",
    "30" => "32",
    "31" => "33"
];

//Übsersetzungstabelle (Intern -> Steckerpin, gilt für Spurkabelprüfung)
$translationMap2 = [
    "0" => "25",
    "1" => "24",
    "2" => "23",
    "3" => "22",
    "4" => "21",
    "5" => "20",
    "6" => "19",
    "7" => "18",
    "8" => "17",
    "9" => "16",
    "10" => "15",
    "11" => "14",
    "12" => "13",
    "13" => "12",
    "14" => "11",
    "15" => "10",
    "16" => "41",
    "17" => "40",
    "18" => "39",
    "19" => "38",
    "20" => "37",
    "21" => "36",
    "22" => "35",
    "23" => "34",
    "24" => "33",
    "25" => "32",
    "26" => "31",
    "27" => "30",
    "28" => "29",
    "29" => "28",
    "30" => "27",
    "31" => "26"
];

// Diese Funktion übersetzt die interne Pin-Bezeichnung in die des Herstellers gem. translationMap
// weil die Hardware der Spurkabelprüfer anders verschaltet ist, als die des Programmsetckerprüfers, wird nach zwei Übersetzungstabellen bei der Spurkabelprüfung gearbeitet
// nodes[0] wird gem Standardtabelle gehandhabt,  nodes[1] nach translationMap2 - unsauber, aber nur durhc Software lösbar
function translateArray($inputArray, $translationMap, $translationMap2 = null) {
    return array_map(function($subArray) use ($translationMap, $translationMap2) {
        $map1 = $translationMap;
        $map2 = $translationMap2 ?? $translationMap; // Wenn keine zweite Map, nimm die erste
        return [
            $map1[$subArray[0]] ?? $subArray[0],
            $map2[$subArray[1]] ?? $subArray[1]
        ];
    }, $inputArray);
}

function measurementsDiffer($bridges1, $bridges2) {
	//Isoliere die Brücken
	$bridges1 = array_map(function($entry) {
		return $entry[0];
	}, $bridges1);
		
	$bridges2 = array_map(function($entry) {
		return $entry[0];
	}, $bridges2);

	//Zeichne die Steckergrafik
	$url1 = "../stecker.php?data=" . urlencode(json_encode(translateArray($bridges1, $translationMap)));
	$url2 = "../stecker.php?data=" . urlencode(json_encode(translateArray($bridges2, $translationMap)));




	?>
	<p>
		Es gab einen Fehler bei der Messung!</br>Messung 1 und Messung 2 lieferten keine übereinstimmenden Ergebnisse.<br>Bitte prüfen Sie, ob alle Steckverbindungen fest sitzen und vermeiden Sie Bewegungen, welche die Messung beeinträchtigen können.</br>Stellen Sie sicher, dass keine der Verbindungen gegen Erde kurzgeschlossen ist, da dies die Messung beeinträchtigt.<br>Erwägen Sie, eine erneute Messung durchzuführen.
	</p>
	<br>
	<p>Ergebnis Messung 1:</p>
	<i><?php print_r($output1); ?><i>
	<img src="<?php echo $url1; ?>" />
	<p>Ergebnis Messung 2:</p>
	<i><?php  print_r($output2); ?><i>
	<img src="<?php echo $url2; ?>" />
	<div class="save-button" onclick="window.location.href='#index'; pageload();$('.save-button').html('<img src=\'load.gif\' \>Bitte warten...');"><img src="/vendor/icons/nav-arrow-left.svg" \>Zurück</div>

	<?php

	die();	
}


function measurementsContainErrors($bridges) {
	
	?>
	<h3>Eine oder mehrere Prüfungen versagten. Vollständige Fehlerausgabe:</h3>
	<table>
		<tr><td>Brücke von</td><td>nach</td><td>Aufgetretene Fehler</td>
	
		<?php
		foreach($bridges as $bridge) {
			echo "<tr><td>" . $bridge[0][0] . "</td><td>" . $bridge[0][1] . "</td><td>" . $bridge[1] . "</td></tr>";
		}
		?>
		
	</table>
	<hr>
	<h3>Fehlercodes:</h3>
	
	<?php
	include("../errorcodes.php");
	die();
	
}


/*

Ootionale Funktion, die implizite Verbindungen herleitet (KI-generiert)


function completeCycleEdges(array $edges): array {
    // 1. Alle einzigartigen Knoten extrahieren
    $nodes = [];
    foreach ($edges as $edge) {
        foreach ($edge as $node) {
            $nodes[$node] = true;
        }
    }
    $nodes = array_keys($nodes);

    // 2. Sortiere Knoten (optional, für konsistente Reihenfolge)
    sort($nodes);

    // 3. Erstelle vollständigen Kreis (Verbindung i -> i+1, letzter -> erster)
    $completeEdges = [];
    $numNodes = count($nodes);
    for ($i = 0; $i < $numNodes; $i++) {
        $from = $nodes[$i];
        $to = $nodes[($i + 1) % $numNodes]; // Kreis schließen
        $completeEdges[] = [$from, $to];
    }

    return $completeEdges;
}

$edges = [[0,1], [2,0]];
$result = completeCycleEdges($edges);

print_r($result);






*/


?>
