<?php
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Credentials:true");
header("Access-Control-Allow-Methods:GET,HEAD,OPTIONS,POST,PUT");
header("Access-Control-Allow-Headers:Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, AUTH_TOKEN,Cache-Control");
header("Access-Control-Expose-Headers: X-Suggested-Filename");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit(0);
}
require('config.php');
/*require("../config.php");

global $DB_USER;*/

$DB_USER = $GLOBALS["DB_USER"];

$response;
switch ($_SERVER["REQUEST_METHOD"]) {
    case "POST":
        $response = SolvePostRequest();
        break;
    case "GET":
        $response = SolveGetRequest();
        break;
}
if ($response) {
    echo json_encode($response);
}
return;

function SolvePostRequest()
{
    if (count($_FILES) > 0) {
        $body = (object)$_POST ?? new stdClass();
    } else {
        $body = json_decode(file_get_contents('php://input')) ?? new stdClass();
    }

    $uri = explode('/', $_REQUEST["path"]);

    if (count($uri) !== 2) {
        return ["ok" => false, "msg" => "Illegal parameters"];
    }
    $routes = include('./routes.php'); //load route map

    $controller = $routes[$uri[0]] ?? null;
    $method = $uri[1] ?? null;
    if ($controller) {
        require_once('./' . $controller . '.php');
        $contr = str_replace('/', '\\', $controller);
        $exists = method_exists('\\' . $contr, $method);
        if ($exists) {
            $result = call_user_func(array('\\' . $contr, $method), $body);
        } else {
            $result = ["ok" => false, "msg" => "Method does not exists!"];
        }
        return $result;
    }
}

function SolveGetRequest()
{
    if (count($_GET) > 1) {
        $body = (object)array_slice($_GET, 1, count($_GET) - 1);
    } else {
        $body = new stdClass();
    }

    $uri = explode('/', $_REQUEST["path"]);

    if (count($uri) !== 2) {
        return ["ok" => false, "msg" => "Illegal parameters"];
    }
    $routes = include('./routes.php'); //load route map

    $controller = $routes[$uri[0]] ?? null;
    $method = $uri[1] ?? null;
    if ($controller) {
        require_once('./' . $controller . '.php');
        $contr = str_replace('/', '\\', $controller);
        $result = call_user_func(array('\\' . $contr, $method), $body);
        return $result;
    } else {
        return ["ok" => false, "msg" => "Unknown method"];
    }
}















