<?php
date_default_timezone_set('UTC');
$GLOBALS['start_time'] = DateTime::createFromFormat(DateTime::ISO8601, "2024-11-02T08:53:00+01");
$GLOBALS['number_of_controls'] = 3;

//declare(strict_types=1);
class Runner
{
    public int $id;
    public string $name;
    public string $club;
    public string $course;
    public array $splits;

    function __construct($id, $name, $club, $course)
    {
        //echo($id);
        //echo($name);
        if ($id == null) {
            $id = 0;
            $name = "";
        }
        $this->id = $id;
        $this->name = $name;
        $this->club = $club;
        $this->course = $course;
        for ($i = 0; $i < $GLOBALS['number_of_controls']; $i++) {
            $this->splits[$i] = false;
        }
    }

    function set_split($control, $timestamp)
    {
        $this->splits[$control] = $timestamp;
    }

    function get_control()
    {        for ($i = 0; $i < count($this->splits); $i++) {

            if (!is_object($this->splits[$i])) {
                return $i-1;
            }
    }
	return count($this->splits)-1;
    }
}

//find runner by id in list of Runner objects
function get_runner($runnner_list, int $id)
{
    for ($i = 0; $i < count($runnner_list); $i++) {
        if ($runnner_list[$i]->id == $id) {
            return $runnner_list[$i];
        }
    }
    return false;
}

function cmp(Runner $a, Runner $b) {
    $a_control = $a->get_control();
    $b_control = $b->get_control();
    if ($a_control > $b_control){
        return -1;
    }
    if ($a_control < $b_control){
        return 1;
    }
    if ($a_control == -1) {
        return 1;
    }
    if ($b_control == -1) {
        return -1;
    }
    if ($a->splits[$a_control]->getTimestamp() < $b->splits[$b_control]->getTimestamp()){
        return -1;
    }
    if ($a->splits[$a_control]->getTimestamp() > $b->splits[$b_control]->getTimestamp()){
        return 1;
    }
    return 0;
}
function cmp_course(Runner $a, Runner $b) {
    return strcmp($a->course, $b->course);
}

function filter_runners(Runner $runner, $id) {
    if ($runner->id == $id) {
        return True;
    }
    else {
        return False;
    }
}


$runners = [];
$csv_runners = file_get_contents("db.csv");
$csv_runners = str_getcsv($csv_runners, "\n");
//print_r($csv_runners);
for ($i = 1; $i < count($csv_runners); $i++) {
    $line = str_getcsv($csv_runners[$i]);
    array_push($runners, new Runner($line[0], $line[1], $line[2], $line[3]));
}


$timings = file_get_contents("passering.csv");
$timings = str_getcsv($timings, "\n");
for ($i = 0; $i < count($timings); $i++) {
    $line = str_getcsv($timings[$i]);

    $time = DateTime::createFromFormat("Y-m-d\TH:i:sp", $line[2]);
    if (!$time) {
        //error
        continue;
    }

    $runner = get_runner($runners, (int) $line[1]);
    if (!$runner) {
        //error
        continue;
    }

    $runner->set_split($line[0]-1, $time);
}


if (!isset($query)){
    parse_str($_SERVER['QUERY_STRING'], $query);
}

if ($query["type"] == "registrering"){
    $matpost = $query["control"];
    $runners_filtered = [];
    if ($query["filter"]) {
        for ($i = 0; $i < count($runners); $i++) {
            if (filter_runners($runners[$i], $query["filter"])) {
                array_push($runners_filtered, $runners[$i]);
            }
        }
        $runners = $runners_filtered;
    }

    

    echo("  <thead><tr>
    <th>#</th>
    <th>Navn</th>
    <th>Tid</th>
    <th></th>
    </tr></thead>
    <tbody>");
    for ($i = 0; $i < count($runners); $i++) {
        $runner = $runners[$i];
        
        // Klokkeslett for denne posten
        if ($runner->splits[$matpost-1] != false) {
            $tid_passering = $GLOBALS['start_time']->diff($runner->splits[$matpost-1])->format('%H:%I:%S');
        }
        else {
            $tid_passering = "";
        }
        
        if ($runner->get_control() == $matpost-1) {
            // Løperen har vært på denne matposten og vi farger raden grønn
            $button = "<button onclick=\"register_runner($runner->id)\">✓</button>";
            $cssclass = "class=\"bg-success\"";
        }
        elseif ($runner->get_control() > $matpost-1) {
            // Løperen har vært på denne matposten og vi farger raden grønn
            $button = "<button onclick=\"register_runner($runner->id)\">✓</button>";
            $cssclass = "class=\"bg-active\"";
        }
        else {
            $button = "<button onclick=\"register_runner($runner->id)\">✓</button>";
            $cssclass = "";
        }
        echo ("<tr $cssclass><td>$runner->id</td><td>$runner->name</td><td>$tid_passering</td><td>$button</td></tr>\n");
    }
    echo("</tbody>");
}
elseif ($query["type"] == "paameldte") {
    usort($runners, "cmp_course");

    $kadaverløpere = 0;
    $minikadaverløpere = 0;
    for ($i = 0; $i < count($runners); $i++) {
        if ($runners[$i]->course == "Kadaverløpet") {
            $kadaverløpere++;
        }
        elseif ($runners[$i]->course == "Minikadaver'n") {
            $minikadaverløpere++;
        }
    }

    echo("<div class=\"flex space-evenly\">
    <div class=\"flash accent\">$kadaverløpere påmeldt Kadaverløpet</div><div class=\"flash accent\">$minikadaverløpere påmeldte i Minikadaver'n</div>
    </div>");

    echo("<table><thead>
        <tr>
        <th>S.nr</th>
        <th>Navn</th>
        <th>Klubb/Forening</th>
        <th>Variant</th>
    </tr></thead>
    <tbody>");
    for ($i = 0; $i < count($runners); $i++) {
        $runner = $runners[$i];
        echo ("<tr><td>$runner->id</td><td>$runner->name</td><td>$runner->club</td><td>$runner->course</td></tr>\n");
    }
    echo("<table><tbody>");
}
else {
    usort($runners, "cmp");
    usort($runners, "cmp_course");
    $kadaver_table = "<table><thead>
        <tr>
        <th>#</th>
	<th>Navn</th>
        <th>1. matpost</th>
        <th>2. matpost</th>
        <th>Mål</th>
    </tr></thead>
    <tbody>";
    $minikadaver_table = "<table><thead>
    <tr>
    <th>#</th>
    <th>Navn</th>
    <th>Mål</th>
    </tr></thead>
    <tbody>";
       	$kadaver_num = 0;
       	$mini_num = 0;	
    for ($i = 0; $i < count($runners); $i++) {
        $runner = $runners[$i];
	if ($runner->course == "Kadaverløpet") {
		$kadaver_num++;
            $tid_1_mat = "";
            if ($runner->splits[0] != false) {
                // https://www.php.net/manual/en/class.dateinterval.php
                $tid_1_mat = $GLOBALS['start_time']->diff($runner->splits[0])->format('%H:%I:%S');
            }
            $tid_2_mat = "";
            if ($runner->splits[1] != false) {
                $tid_2_mat = $GLOBALS['start_time']->diff($runner->splits[1])->format('%H:%I:%S');
            }
            $matposter = "<td>$tid_1_mat</td><td>$tid_2_mat</td>";
	}
	else {
		$mini_num++;
	}
        $tid_maal = "";
        if ($runner->splits[2] != false) {
            $tid_maal = $GLOBALS['start_time']->diff($runner->splits[2])->format('%H:%I:%S');
        }
        if ($runner->course == "Kadaverløpet") {
            $kadaver_table .= "<tr><td>". $kadaver_num .".</td><td>$runner->name</td>$matposter<td>$tid_maal</td></tr>\n";
        }
        elseif ($runner->course == "Minikadaver'n") {
            $minikadaver_table .= "<tr><td>". "" .".</td><td>$runner->name</td><td>$tid_maal</td></tr>\n";
        }
    }
    $kadaver_table .= "</tbody></table>";
    $minikadaver_table .= "</tbody></table>";
    echo($kadaver_table);
}