<?php
require "./vendor/autoload.php";

$method = $_SERVER["REQUEST_METHOD"];
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

$dispatcher = FastRoute\simpleDispatcher(function ($r) {
    $r->get('/', 'home');
    $r->post('/api/login-user', 'login');
    $r->get('/api/szallasok', 'accomodationsList');
    $r->get('/api/szallasok/{id}', 'accomodationById');
    $r->get('/api/get-new-access-token', 'getNewAccessToken');
    $r->post('/api/logout-user', 'logout');
});

function home()
{
    require './build/index.html';
}

function login($vars, $body)
{
    header('Content-type: application/json');
    if (!isUserValid($body)) {
        http_response_code(401);
        echo json_encode(['error' => 'invalid credentials']);
        return;
    }

    // 1. Megvalósítandó: Access token kigenerálása és elküldése

    // 2. Megvalósítandó: Refresh token kigenerálása és beállítása sütinek

    echo json_encode(["accessToken" => "kigeneraltAccessToken"]);
};

function isUserValid($body)
{
    return $body['email'] === 'user@kodbazis.hu' && $body['password'] === "teszt";
}

function accomodationsList()
{
    header('Content-type: application/json');
    // Megvalósítandó: Access token kikérése a kérés fejlécéből és dekódolás
    // Ha sikeres volt a dekódolás, akkor válasz megküldése, máskülönben 401
    echo file_get_contents("./store/airbnb.json");
};

function accomodationById($vars, $body)
{
    header('Content-type: application/json');

    // Megvalósítandó: Access token kikérése a kérés fejlécéből és dekódolás
    // Ha sikeres volt a dekódolás, akkor válasz megküldése, máskülönben 401

    $content =  file_get_contents('./store/airbnb.json');
    $items  = json_decode($content, true);
    $filtered = array_values(
        array_filter($items, fn ($item) => $item['id'] == $vars['id'])
    );

    if (!count($filtered)) {
        http_response_code(404);
        echo json_encode(['error' => 'not found']);
    }

    echo json_encode($filtered[0]);
}

function getNewAccessToken()
{
    // Megvalósítandó: Access token megújítása a refresh tokennel
    // Ha nincs, vagy nem érvényes a refresh token, akkor 401-es hiba

    header('Content-type: application/json');
    echo json_encode(["accessToken" => "kigeneraltAccessToken"]);
};

function logout()
{
    // Megvalósítandó: Refresh token törlése
};

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$routeInfo = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], $path);
switch ($routeInfo[0]) {
    case FastRoute\Dispatcher::NOT_FOUND:
        home();
        break;
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
        home();
        break;
    case FastRoute\Dispatcher::FOUND:
        $handler = $routeInfo[1];
        $vars = $routeInfo[2];
        $body = json_decode(file_get_contents('php://input'), true);
        $handler($vars, $body);
        break;
}
