<?php

use App\Configuration;
use App\DeegraphSchemas\CollectionSchema;
use App\DeegraphSchemas\TuneSchema;
use App\Enumerators\SessionElement;
use App\Wrappers\SessionWrapper;
use App\Wrappers\TwigWrapper;
use Darksparrow\AuxiliumSchemaBuilder\SchemaBuilder\SchemaBuilder;

require_once __DIR__ . "/../vendor/autoload.php";

SessionWrapper::Start();

// Get the request URI and break it into segments
$requestUri = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
$requestElements = explode("/", trim($requestUri, "/"));

// Define routing map
$routes = [
    ""                  => '/../Pages/index.php',

    "test"             => '/../Pages/test.php',

    "login"             => '/../Pages/login.php',
    "logout"            => '/../Pages/logout.php',
    "change-password"   => '/../Pages/change-password.php',
    "profile"           => '/../Pages/profile.php',

    "tunes"             => '/../Pages/tunes.php',
    "tune-sets"         => '/../Pages/tune-sets.php',

    "dances"            => '/../Pages/dances.php',
];

// Handle static and API routes
$excludedRoutes = [
    "favicon.ico",
    "Static",
    "API",
    "FormHandling",
];
if (in_array($requestElements[0], $excludedRoutes))
{
    return false;
}

// Route handling for top-level pages
if (isset($routes[$requestElements[0]]))
{
    require_once __DIR__ . $routes[$requestElements[0]];
    return true;
}

if ($requestElements[0] === "tune" && isset($requestElements[1]))
{
    $_GET['tune-id'] = $requestElements[1];

    if (count($requestElements) === 2)
    {
        require_once __DIR__ . '/../Pages/tune/uuid.php';
        return true;
    }
}
elseif ($requestElements[0] === "tune-set" && isset($requestElements[1]))
{
    $_GET['tune-set-id'] = $requestElements[1];

    if (count($requestElements) === 2)
    {
        require_once __DIR__ . '/../Pages/tune-set/uuid.php';
        return true;
    }

    $tuneSubRoutes = [
        "suggest-variant"   => '/../Pages/tune-set/uuid/suggest-variant.php',
        "suggest-dance"     => '/../Pages/tune-set/uuid/suggest-dance.php',
    ];

    if (isset($tuneSubRoutes[$requestElements[2]])) {
        require_once __DIR__ . $tuneSubRoutes[$requestElements[2]];
        return true;
    }
}
elseif ($requestElements[0] === "dance" && isset($requestElements[1]))
{
    $_GET['dance-id'] = $requestElements[1];

    if (count($requestElements) === 2)
    {
        require_once __DIR__ . '/../Pages/dance/uuid.php';
        return true;
    }
}
elseif ($requestElements[0] === "create" && isset($requestElements[1]))
{
    switch($requestElements[1])
    {
        case "tune":
            require_once __DIR__ . '/../Pages/create/tune.php';
            return true;
    }
}
elseif ($requestElements[0] === "Schemas" && isset($requestElements[1]))
{
    switch($requestElements[1])
    {
        case "Collection.json":
            SchemaBuilder::RenderSchema(CollectionSchema::class);
        case "Tune.json":
            SchemaBuilder::RenderSchema(TuneSchema::class);
    }
}

// Default: route not found
http_response_code(404);
echo "404 Not Found";
return false;