<?php

/**
 *  Informatica Eindproject D4p
 *  6in3, Stedelijk Gymnasium Nijmegen
 *  Docent: Hans de Wolf
 *
 *  ==================
 *
 *  Daniel Boutros,
 *  Christiaan Goossens,
 *  Jelmer Hinssen
 */

namespace Inforbank;

class Proxy
{
    public static $route;

    public function __invoke($request, $response, $next)
    {
        $uri = $request->getUri();

        self::$route = $uri;

        $path = $uri->getPath();
        $pa = explode('assets/', $path, 2);

        if (isset($pa[1])) {
            $path = __DIR__ . '/../assets/'.$pa[1];
            $path = realpath($path);

            if ($path) {
                $ext = pathinfo($path, PATHINFO_EXTENSION);
                $ext2Mime = array(

                    'txt' => 'text/plain',
                    'htm' => 'text/html',
                    'html' => 'text/html',
                    'php' => 'text/html',
                    'css' => 'text/css',
                    'js' => 'application/javascript',
                    'json' => 'application/json',
                    'xml' => 'application/xml',
                    'swf' => 'application/x-shockwave-flash',
                    'flv' => 'video/x-flv',

                    // images
                    'png' => 'image/png',
                    'jpe' => 'image/jpeg',
                    'jpeg' => 'image/jpeg',
                    'jpg' => 'image/jpeg',
                    'gif' => 'image/gif',
                    'bmp' => 'image/bmp',
                    'ico' => 'image/vnd.microsoft.icon',
                    'tiff' => 'image/tiff',
                    'tif' => 'image/tiff',
                    'svg' => 'image/svg+xml',
                    'svgz' => 'image/svg+xml',

                    // archives
                    'zip' => 'application/zip',
                    'rar' => 'application/x-rar-compressed',
                    'exe' => 'application/x-msdownload',
                    'msi' => 'application/x-msdownload',
                    'cab' => 'application/vnd.ms-cab-compressed',

                    // audio/video
                    'mp3' => 'audio/mpeg',
                    'qt' => 'video/quicktime',
                    'mov' => 'video/quicktime',

                    // adobe
                    'pdf' => 'application/pdf',
                    'psd' => 'image/vnd.adobe.photoshop',
                    'ai' => 'application/postscript',
                    'eps' => 'application/postscript',
                    'ps' => 'application/postscript',

                    // ms office
                    'doc' => 'application/msword',
                    'rtf' => 'application/rtf',
                    'xls' => 'application/vnd.ms-excel',
                    'ppt' => 'application/vnd.ms-powerpoint',

                    // open office
                    'odt' => 'application/vnd.oasis.opendocument.text',
                    'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
                );

                if (array_key_exists($ext, $ext2Mime)) {
                    $mime = $ext2Mime[$ext];
                } else {
                    $finfo = finfo_open(FILEINFO_MIME_TYPE);
                    if (false !== ($_mime = finfo_file($finfo, $path))) {
                        $mime = $_mime;
                    }
                    finfo_close($finfo);
                }

                header('Content-Type: ' . $mime);
                header('Content-Length: ' . filesize($path));

                ob_clean();
                flush();
                readfile($path);
                exit;
            } else {
                return $next($request, $response);
            }
        }

        return $next($request, $response);
    }
}
