<?php
require_once "lib/pushfiles.inc";
require_once "lib/timestamp.inc";
require_once "lib/config.inc";

ini_set('log_errors', 1);
ini_set('error_log', SSR . '/log/error.log');

$cache = SSR . "/.cache";

$path = $_SERVER['REQUEST_URI'];
$toks = explode('#', $path);
$path = $toks[0];

$filename = trim($path, '/');
$toks = explode('?', $filename);
if (count($toks) > 1 &&
    $toks[0] === 'login') {
    $toks1 = explode('&', $toks[1]);
    foreach($toks1 as $tok1) {
		$toks2 = explode('=', $tok1);
		if ($toks2[0] === 'redirect') {
		    $path = $toks2[1];
		    $filename = trim($path, '/');
		}
    }
}
$toks = explode('?', $filename);
if (count($toks) > 1) {
    $acc = [];
    $toks1 = explode('&', $toks[1]);
    foreach($toks1 as $tok1) {
        $toks2 = explode('=', $tok1);
        if ($toks2[0] !== 'gclid' &&
            $toks2[0] !== 'fbclid') {
            $acc[] = $tok1;
        }
    }
    if (count($acc)>0)
        $filename = $toks[0] . '?' . implode('&', $acc);
    else
        $filename = $toks[0];
}

if ($filename === '') {
	$filename = 'index.html';
} else {
	$filename = "$filename.html";
}
$filename = "$cache/$filename";
$filedir = dirname($filename);
$realfiledir = realpath($filedir);

if ($realfiledir && substr($realfiledir, 0, strlen($cache)) !== $cache) {
	http_response_code(404);
	die;
}

if (file_exists($filename) && filemtime($filename)>$timestamp) {
    header("Link: <$jsFile>; rel=preload; as=script, <$cssFile>; rel=preload; as=style");
    echo file_get_contents($filename);
} else {
  try {
    $html = file_get_contents("http://localhost:" . NODE_PORT . $path);
    if ($html) {
		    header("Link: <$jsFile>; rel=preload; as=script, <$cssFile>; rel=preload; as=style");

	      if(!file_exists($filedir)) mkdir($filedir, 0777, true);
        file_put_contents($filename, $html, LOCK_EX);
    } else {
    	$html = file_get_contents(SSR . '/index.html');
    }
  } catch (Exception $e) {
    error_log($e->getMessage());
    $html = file_get_contents(SSR . '/index.html');
  }
	if($html) echo $html;
	else http_response_code(404);
}
