<?php
$timeStart = microtime();
//echo "<h1>Routed</h1>";

function isSub($val) {
        $subs = [
                'CryptoCurrency',
                'CryptoCurrencies',
                'Bitcoin',
                'SatoshiStreetBets',
               	'CryptoMoonShots',
                'CryptoMarkets',
		'stocks',
		'wallstreetbets',
		'Shortsqueeze',
		//'Superstonk',
		'ethereum',
		'pennystocks',
		'ethtrader',
		'all',
		'all-stocks',
		'all-crypto',
		'options',
		'WallStreetbetsELITE',
		'Wallstreetbetsnew',
		'SPACs',
		'investing',
		'Daytrading',
		'StockMarket',
		'SqueezePlays',
		'4chan'
        ];
        if(in_array($val, $subs)) {
                return true;
        }
        return false;
}


if(strlen($_SERVER['REQUEST_URI']) > 4 && substr($_SERVER['REQUEST_URI'], -4) == '.png') {
	$ticker = basename($_SERVER['REQUEST_URI'], '.png');
	$cachePath = '/var/www/8marketcap/img-cache/' . $ticker . '.png';

	if(file_exists($cachePath)) {
		header('Content-type: image/png');
		header('max-age: 2592000');
		readfile($cachePath);
		die();
	}

	$companiesRes = file_get_contents('https://companiesmarketcap.com/img/company-logos/80/' . $ticker . '.png');
	if(!empty($companiesRes)) {
		$fp = fopen($cachePath,'w');
		fwrite($fp, $companiesRes);
		fclose($fp);
		header("Content-type: image/png");
		header('Cache-Control: max-age=2592000, public');
                readfile($cachePath);
	}
	//print_r($companiesRes);
	die();
}

$foundCurrentSub = false;
$currentSub = 'all-stocks';
$path = strtok($_SERVER['REQUEST_URI'],'?');
if(isSub(trim($path,'/'))) {
	$currentSub = trim($path,'/');
	$foundCurrentSub = true;
}

$pathParts = explode('/', trim($path, '/'));

switch($pathParts[0]) {
	case 'methodology':
		$_GET['page'] = 'methodology';
		$currentSub = '';
	break;
        case 'api':
                $_GET['page'] = 'api';
		$currentSub = '';

		if(isset($pathParts[1]) && $pathParts[1] == 'v1.0') {
			if(isset($pathParts[2]) && isset($pathParts[3]) && $pathParts[2] == 'filter') {
				$_GET['filter'] = $pathParts[3];
				if(isset($pathParts[4]) && isset($pathParts[5]) && $pathParts[4] == 'page') {
					$_GET['pageNbr'] = $pathParts[5];
				}
			}
			include('api-v1.0.php');
			die();
		} else if(isset($pathParts[1]) && $pathParts[1] == 'v2.0-beta') {
			if(isset($pathParts[2]) && isset($pathParts[3]) && $pathParts[2] == 'filter') {
				$_GET['api_action'] = 'list';
                                $_GET['filter'] = $pathParts[3];
                                if(isset($pathParts[4]) && isset($pathParts[5]) && $pathParts[4] == 'page') {
                                        $_GET['pageNbr'] = $pathParts[5];
                                }
                        } else if(isset($pathParts[2]) && isset($pathParts[3]) && $pathParts[2] == 'details') {
				$_GET['api_action'] = 'details';
				$_GET['ticker'] = $pathParts[3];
			}
                        include('api-v2.0-beta/api.php');
                        die();
		}
        break;
        case 'tickers':
		if(!preg_match('#^[A-Z0-9\.]*$#',$pathParts[1])) {
			header("Location: /404/");
			die();
		}
		if(preg_match('#^[A-Z0-9]*\.X$#',$pathParts[1])) {
			header('Location: /cryptocurrencies/' . str_replace('.X','',$pathParts[1]) . '/');
		} else {
			header('Location: /stocks/' . $pathParts[1] . '/');
		}
		die();
        break;
        case 'stats':
                if(!isset($pathParts[1])) {
                        break;
                }
                if(!preg_match('#^[A-Za-z0-9]*$#',$pathParts[1])) {
                        header("Location: /404/");
                        die();
                }
                $_GET['page'] = 'stats';
                $currentSub = $pathParts[1];
        break;
	case 'stocks':
		if(!isset($pathParts[1])) {
			break;
		}
		if(!preg_match('#^[A-Z0-9]*$#',$pathParts[1])) {
                        header("Location: /404/");
                        die();
                }
		$_GET['page'] = 'details';
                $currentTicker = $pathParts[1];
                $currentSub = '';
	break;
	case 'cryptocurrencies':
                if(!preg_match('#^[A-Z0-9]*$#',$pathParts[1])) {
                        header("Location: /404/");
                        die();
                }
                $_GET['page'] = 'details';
                $currentTicker = $pathParts[1] . '.X';
                $currentSub = '';
	break;
	case 'account':
                $_GET['page'] = 'account';
                if(isset($pathParts[1]) && $pathParts[1] == 'password-reset') {
                	$passwordToken = explode('?password_token=', $_SERVER['REQUEST_URI']);
                	$passwordToken = @$passwordToken[1];
                	$_GET['page'] = 'password-reset';
                } else if(isset($pathParts[1]) && $pathParts[1] == 'forgot-password') {
                	$_GET['page'] = 'forgot-password';
                }
        break;
        case 'watchlist':
                $_GET['page'] = 'watchlist';
		$currentSub ='';

                if(isset($pathParts[1]) && ($pathParts[1] == 'add' || $pathParts[1] == 'remove')) {
			$csrfToken = explode('?csrf_token=', $_SERVER['REQUEST_URI']);
			if(isset($csrfToken[1])) {
				include_once('inc.php');

				$csrfToken = $csrfToken[1];
				$assetId = $pathParts[2];

				if(!isset($_COOKIE['sessionToken'])) {
					die('{"success": flase, "message":"Not logged in"}');
				}

				$GLOBALS['user_data'] = getUserData($_COOKIE['sessionToken']);

				if($csrfToken == @$GLOBALS['user_data']['csrf_token']) {
					if($pathParts[1] == 'add') {
						addToWatchlist($GLOBALS['user_data']['user_id'], $_COOKIE['sessionToken'], $pathParts[2]);
					}

					if($pathParts[1] == 'remove') {
						removeFromWatchlist($GLOBALS['user_data']['user_id'], $_COOKIE['sessionToken'], $pathParts[2]);
					}

					die('{"success": true}');
				} else {
					die('{"success": flase, "message":"Invalid CSRF token"}');
				}
			} else {
				die('{"success": flase, "message":"Missing CSRF token"}');
			}
		}
        break;
        case 'login':
                include_once('inc.php');

                $credentials = [
                	'email' => $_POST['email'],
                	'password' => $_POST['password'],
                	'website' => 'apewisdom',
                ];
                $resp = login($credentials);
                echo json_encode($resp);
                die();
        break;
        case 'logout':
		$csrfToken = explode('?csrf_token=', $_SERVER['REQUEST_URI']);
		if(isset($csrfToken[1])) {
			include_once('inc.php');
			$GLOBALS['user_data'] = getUserData($_COOKIE['sessionToken']);
			$resp = logout();

			$csrfToken = $csrfToken[1];

			if($csrfToken == @$GLOBALS['user_data']['csrf_token']) {
				logout();
			}
		}

		header("Location: /");
        break;
        case 'sign-up':
                $_GET['page'] = 'sign-up';
        break;
        case 'privacy':
                $_GET['page'] = 'privacy';
        break;
	case '404':
                $_GET['page'] = '404';
                $currentSub = '';
        break;
	case '':
                // index
        break;
	default:
		if(!$foundCurrentSub) {

			if(substr($_SERVER['REQUEST_URI'], 0, 8) === '/api.php') {
				include_once('api.php');
				die();
			}


			header("Location: /404/");
		}
		$_GET['page'] = 'default';
}

include('index.php');
//echo '<!-- in: ' . (microtime() - $timeStart) . '-->';

