<?php


function initRouter(): bool
{
    global $routerRequest;
    global $routerConfig;

    $routerRequest["requestAddress"] = array_slice(explode('.', $_SERVER['HTTP_HOST']), -3, 3); //get the last 3 elements

    $needsRedirect = false;

    if(count($routerRequest["requestAddress"]) < 3){
        // Root domain accessed directly
        $routerRequest["subdomain"] = $routerConfig["default_site"];
        $routerRequest["domain"] = basename($routerRequest["requestAddress"][0]);
        $routerRequest["tld"] = basename($routerRequest["requestAddress"][1]);
        $routerRequest["isToApex"] = true;

    }
    else {
        $routerRequest["subdomain"] = basename($routerRequest["requestAddress"][0]);
        $routerRequest["domain"] = basename($routerRequest["requestAddress"][1]);
        $routerRequest["tld"] = basename($routerRequest["requestAddress"][2]);

        if($routerRequest["subdomain"] == $routerConfig["default_site"]){
            $routerRequest["subdomain"] = "";
            $needsRedirect = true;
        }
    }

    $routerRequest["page_name"] = basename($_SERVER["QUERY_STRING"]);

    if (empty($routerRequest["page_name"])) {
        // Page name is empty
        $needsRedirect = true;
        $routerRequest["page_name"] = $routerConfig["default_page"];
    }


    if ($needsRedirect) {
        if(!empty($routerRequest["subdomain"])){
            $sub_domain = $routerRequest["subdomain"] . ".";
        }
        else{
            $sub_domain = "";
        }
        $redirectAddress = $routerConfig["protocol"] .
            $sub_domain .
            $routerRequest["domain"] . "." .
            $routerRequest["tld"] . "/" .
            $routerRequest["page_name"];
        // Redirect with default page name
        header("Location: $redirectAddress");
        return false;
    }
    else{
        if($_SERVER["REQUEST_METHOD"] == "POST"){
            $routerRequest["type"] = "api";
        }
        if(empty($routerRequest["type"])){
            $routerRequest["type"] = "page";
        }
        return true;
    }
}