namespace PHPVideoToolkit;

include_once './includes/bootstrap.php';
$ffmpeg = new FfmpegParser();
$is_available = $ffmpeg->isAvailable();
Trace::vars('$ffmpeg->isAvailable()', $is_available);
$ffmpeg_version = $ffmpeg->getVersion();
Trace::vars('$ffmpeg->getVersion()', $ffmpeg_version);
$has_ffmpeg_php_support = $ffmpeg->hasFfmpegPhpSupport();
Trace::vars('$ffmpeg->hasFfmpegPhpSupport()', $has_ffmpeg_php_support);
$basic_ffmpeg_information = $ffmpeg->getFfmpegData();
Trace::vars('$ffmpeg->getFfmpegData()', $basic_ffmpeg_information);
$basic_ffmpeg_information = $ffmpeg->getCommands();
Trace::vars('$ffmpeg->getCommands()', $basic_ffmpeg_information);
$ffmpeg_formats = $ffmpeg->getFormats();
Trace::vars('$ffmpeg->getFormats()', $ffmpeg_formats);
$ffmpeg_audio_codecs = $ffmpeg->getCodecs('audio');
Trace::vars('$ffmpeg->getCodecs(\'audio\')', $ffmpeg_audio_codecs);
$ffmpeg_video_codecs = $ffmpeg->getCodecs('video');
Trace::vars('$ffmpeg->getCodecs(\'video\')', $ffmpeg_video_codecs);
$ffmpeg_subtitle_codecs = $ffmpeg->getCodecs('subtitle');
Trace::vars('$ffmpeg->getCodecs(\'subtitle\')', $ffmpeg_subtitle_codecs);
$ffmpeg_bitstream_filters = $ffmpeg->getBitstreamFilters();
Trace::vars('$ffmpeg->getBitstreamFilters()', $ffmpeg_bitstream_filters);
$ffmpeg_filters = $ffmpeg->getFilters();
Trace::vars('$ffmpeg->getFilters()', $ffmpeg_filters);
$ffmpeg_protocols = $ffmpeg->getProtocols();
Trace::vars('$ffmpeg->getProtocols()', $ffmpeg_protocols);
$ffmpeg_pixel_formats = $ffmpeg->getPixelFormats();
Trace::vars('$ffmpeg->getPixelFormats()', $ffmpeg_pixel_formats);
    $multi_output->addOutput($aac_output, $format);
    $video = new Video($example_video_path);
    $process = $video->saveNonBlocking($multi_output, null, Video::OVERWRITE_EXISTING);
    $id = $video->getPortableId();
    $_SESSION['process_id_multiple'] = $id;
    echo '<h1>Process ID</h1>';
    Trace::vars($id);
    echo '<h1>Executed Command</h1>';
    Trace::vars($process->getExecutedCommand());
    echo '<meta http-equiv="refresh" content="1; url=?' . time() . '">';
    exit;
} catch (FfmpegProcessOutputException $e) {
    echo '<h1>Error</h1>';
    Trace::vars($e);
    $process = $video->getProcess();
    if ($process->isCompleted()) {
        echo '<hr /><h2>Executed Command</h2>';
        Trace::vars($process->getExecutedCommand());
        echo '<hr /><h2>FFmpeg Process Messages</h2>';
        Trace::vars($process->getMessages());
        echo '<hr /><h2>Buffer Output</h2>';
        Trace::vars($process->getBuffer(true));
    }
    echo '<a href="?reset=1">Reset Process</a>';
} catch (Exception $e) {
    echo '<h1>Error</h1>';
    Trace::vars($e->getMessage());
    echo '<h2>Exception</h2>';
    Trace::vars($e);
    echo '<a href="?reset=1">Reset Process</a>';
}
    $paths = array();
    foreach ($output as $obj) {
        array_push($paths, $obj->getMediaPath());
    }
    Trace::vars($paths);
} catch (FfmpegProcessOutputException $e) {
    echo '<h1>Error</h1>';
    Trace::vars($e);
    $process = $video->getProcess();
    if ($process->isCompleted()) {
        echo '<hr /><h2>Executed Command</h2>';
        Trace::vars($process->getExecutedCommand());
        echo '<h1>Executed Command RAW</h1>';
        Trace::vars($process->getExecutedCommand(true));
        echo '<hr /><h2>FFmpeg Process Messages</h2>';
        Trace::vars($process->getMessages());
        echo '<hr /><h2>Buffer Output</h2>';
        Trace::vars($process->getBuffer(true));
    }
} catch (Exception $e) {
    echo '<h1>Error</h1>';
    Trace::vars($e->getMessage());
    echo '<h2>Exception</h2>';
    Trace::vars($e);
    if ($process) {
        echo '<hr /><h2>Executed Command</h2>';
        Trace::vars($process->getExecutedCommand());
        echo '<h1>Executed Command RAW</h1>';
        Trace::vars($process->getExecutedCommand(true));
    }
}