<?php
namespace Patchouli;

use FWIF\FWIF;

require_once __DIR__ . '/../startup.php';

$request = Http\HttpRequest::create();

header('Content-Type: ' . (PAT_DEBUG ? 'text/plain; charset=us-ascii' : FWIF::CONTENT_TYPE));

$tPlat = Platform::getUser();

// ONLY EXACT MATCHES ↓

if($request->match('GET', '/packages')) {
    $tags = explode(';', (string)$request->getQueryParam('tags', FILTER_SANITIZE_STRING));
    $packages = empty($tags) ? Patchouli::getPackages() : Patchouli::getPackagesWithTags($tags);
    echo FWIF::encode($packages);
    return;
}

if($request->match('GET', '/')) {
    header('Content-Type: text/html; charset=utf-8');
    echo '<!doctype html><title>Patchouli</title><pre style="font-family:IPAMonaPGothic,\'IPA モナー Pゴシック\',Monapo,Mona,\'MS PGothic\',\'MS Pゴシック\',sans-serif;font-size:16px;line-height:18px;">';
    readfile(PAT_ROOT . '/patchouli.txt');
    echo '</pre>';
    return;
}

// REGEX MATCHES ↓

if($request->match('GET', '#^/packages/([a-z0-9-]+)/?$#', $args)) {
    try {
        $packageInfo = Patchouli::getPackage($args[0]);
    } catch(PackageNotFoundException $ex) {
        http_response_code(404);
        $packageInfo = new ErrorResponse(404, 'Package not found.');
    }
    echo FWIF::encode($packageInfo);
    return;
}

echo FWIF::encode(new ErrorResponse(404, 'Path not found.'));