<?php declare(strict_types=1);
namespace openvk\Web\Presenters;

final class BlobPresenter extends OpenVKPresenter
{
    private function getDirName($dir): string
    {
        if(gettype($dir) === "integer") {
            $dir = (string) $dir;
            if(strlen($dir) < 2) #Must have been a number with 1 digit
                $dir = "0$dir";
        }
        
        return $dir;
    }
    
    function renderFile(/*string*/ $dir, string $name, string $format)
    {
        $dir  = $this->getDirName($dir);
        $name = preg_replace("%[^a-zA-Z0-9_\-]++%", "", $name);
        $path = OPENVK_ROOT . "/storage/$dir/$name.$format";
        if(!file_exists($path)) {
            $this->notFound();
        } else {
            if(isset($_SERVER["HTTP_IF_NONE_MATCH"]))
                exit(header("HTTP/1.1 304 Not Modified"));
            
            header("Content-Type: " . mime_content_type($path));
            header("Content-Size: " . filesize($path));
            header("ETag: W/\"" . hash_file("snefru", $path) . "\"");
            
            readfile($path);
            exit;
        }
    }
}