<?php
set_time_limit(0);
require '../../../vendor/autoload.php';
$GLOBALS["videoExt"] = array('mp4', 'wmv');
$GLOBALS["pdfExt"] = array('doc', 'docx', 'ppt', 'pptx', 'pdf');

use NcJoes\OfficeConverter\OfficeConverter;
use Streaming\Representation;

$ffmpeg = Streaming\FFMpeg::create([
    'ffmpeg.binaries' => 'C:\FFmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'C:\FFmpeg\bin\ffprobe.exe',
    'timeout'          => 3600,
]);

$GLOBALS["ffmpeg"] = $ffmpeg;

$root = '../../../assets';
$folder = 'videos';
FindPath($root, $folder, $ffmpeg);

function ConvertVideo($file_path, $ffmpeg)
{

    $r_1080p = (new Representation)->setKiloBitrate(4096)->setResize(1920, 1080);

    $dir_name = pathinfo($file_path, PATHINFO_DIRNAME);
    $file_name = pathinfo($file_path, PATHINFO_FILENAME);
    $ext = pathinfo($file_path, PATHINFO_EXTENSION);
    if (!file_exists("../." . $dir_name . '/' . $file_name . ".m3u8")) {
        $video = $ffmpeg->open("../." . $file_path);
        $video->hls()
            ->x264()
            ->setHlsTime(300)
            ->addRepresentations([$r_1080p])
            ->save("../." . $dir_name . '/' . $file_name . ".m3u8");
        $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(40))
            ->save("../." . $dir_name . '/' . $file_name . ".jpg");
        $video
            ->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(40), new FFMpeg\Coordinate\Dimension(640, 480), 5)
            ->save("../." . $dir_name . '/' . $file_name . ".gif");
        echo "<span style='color:red;'>";
        echo "   " . $ext . " ==> m3u8";
        echo "</span>";
    }
}

function ConvertPdf($file_path)
{
    $dir_name = pathinfo($file_path, PATHINFO_DIRNAME);
    $file_name = pathinfo($file_path, PATHINFO_FILENAME);
    $ext = pathinfo($file_path, PATHINFO_EXTENSION);
    if (!file_exists("../." . $dir_name . '/' . $file_name . ".pdf")) {
        $converter = new OfficeConverter("../." . $file_path, "./", "soffice.bin ", false);
        $converter->convertTo("../." . $dir_name . '/' . $file_name . ".pdf");
        echo "<span style='color:red;'>";
        echo "   " . $ext . " ==> pdf";
        echo "</span>";
    }
    if (!file_exists("../." . $dir_name . '/' . $file_name . ".jpg")) {
        $root = $_SERVER['DOCUMENT_ROOT']  . '/BIM-Monitor'  . substr($dir_name, 1)  . '/' . $file_name;

        $im = new imagick();
        $im->readimage($root . '.pdf[0]');
        $im->setImageFormat('jpg');
        $im->writeImage($root . '.jpg');
        $im->clear();
        $im->destroy();
        echo "<span style='color:red;'>";
        echo "    pdf ==> jpg";
        echo "</span>";
    }
}


function FindPath($root, $folder, $ffmpeg)
{
    $rootPath = $root . '/' . $folder;
    $paths = array_diff(scandir($root . '/' . $folder), array('.', '..', 'Thumbs.db'));
    natsort($paths);
    echo ("<ul>");
    foreach ($paths as $path) {
        if (str_contains($path, '.')) {
            echo ("<li data-jstree='{ " . '"type" : "file"' . " }' >");
            $title = explode(".", $path)[0];
            $file_path = substr($rootPath, 4) . "/" . $path;
            $path = "title:" . $title . "path:" . $file_path . "  dir_id:" . $folder;
            echo ($path);

            $ext = pathinfo($file_path, PATHINFO_EXTENSION);
            if (in_array($ext, $GLOBALS["videoExt"])) {
                ConvertVideo($file_path, $ffmpeg);
            } else if (in_array($ext, $GLOBALS["pdfExt"])) {
                ConvertPdf($file_path);
            }
            echo ("</li>");
        } else {
            echo ("<li>");
            echo ("dir_name: " . $path . "parent:  " . $folder);
            FindPath($rootPath, $path, $ffmpeg);
            echo ("</li>");
        }
    }
    echo ("</ul>");
}
