<?php
	require '../credentials.php';
	require '../php/utils.php';

	$credentials = new Credentials();
	if ($credentials->adminToken() != ($_POST["token"] ?? "")) {
		exit();
	}

	$csvname = $_FILES['csvname']['tmp_name'];
	$dbname = $_POST['dbname'];

	// Read from CSV
	$inscrits = array_map('str_getcsv', file($csvname));
	array_shift($inscrits); // remove header

	foreach ($inscrits as $key => &$inscrit) {
		$inscrit["key"] = $key;
	}

	shuffle($inscrits); // shuffle randomly

	$forceposraw = $_POST['forcepos'] ?? "[]";
	$forcepos = json_decode($forceposraw, true);
	foreach ($forcepos as $pos) {
		if (!isset($pos["id"]) || !isset($pos["pos"])) continue;

		// Switch entry with key |$pos["id"]| to position |$pos["pos"]|.
		$key = -1;
		foreach ($inscrits as $itKey => &$inscrit) {
			if ($inscrit["key"] == $pos["id"]) {
				$key = $itKey;
				break;
			}
		}
		if ($key === -1) continue;

		// Switch places
		$tmp = $inscrits[$pos["pos"]];
		$inscrits[$pos["pos"]] = $inscrits[$key];
		$inscrits[$key] = $tmp;
	}

	$start = 1;
	$i = $start;
	foreach ($inscrits as $user) {
		$i = ($i + 1) % ($start + count($inscrits));
		if ($i == 0) $i = $i + 1;
		$nom = mysqli_real_escape_string($conn, $user[0]);
		$curs = mysqli_real_escape_string($conn, $user[1]);
		$grau = mysqli_real_escape_string($conn, $user[2]);
		$password = mysqli_real_escape_string($conn, password_hash($user[3], PASSWORD_DEFAULT));
		// Input values into SQL values
		$template = "INSERT INTO `$dbname` (`id`, `nom`, `curs`, `grau`, `quimata`, `requested`, `mort`, `password`, `bits`)" .
					" VALUES (NULL, '$nom', '$curs', '$grau', $i, 0, 0, '$password', ".(int)rand(1,512).")";

		if (!query($template)) die("An error ocurred." . $template);
	}
	
	die("<script>window.location.href = './?successinserting'</script>");
?>
