<?php

$argv = $_SERVER['argv'];
$self = array_shift( $argv );
if ( ( $argv[0] ?? '' ) === '--lie') {
    array_shift( $argv );
    $lie = 'avc1.42e00a';
} elseif ( preg_match( '/^--lie=(.*)$/', $argv[0] ?? '', $matches ) ) {
    array_shift( $argv );
    $lie = $matches[1];
} else {
    $lie = false;
}
$base = array_shift( $argv ); // "fmp4"
$audio = [];
$video = [];

$audioCodecs = [
    'mpeg' => 'mp4a.6b', // works but, technically this is for .fmp4 and we're in mp3 raw
    //'mpeg' => 'mp3', // doesn't seem to work
    'aac' => 'mp4a.40.2',
    'opus' => 'opus',
    'alac' => 'alac',
];

// @fixme use correct settings based on the file
$videoCodecs = [
    'vp9'  => 'vp09.00.41.08',
    'vp8'  => 'vp08.0.0.08',
    'h264' => 'avc1.42e00a',

    // truths
    'mjpeg' => 'jpeg', // works on current mac & iOS 16, but not iOS 10
    'h263'  => 's263', // fail? or should it be s263?
    'mpeg4' => 'mp4v.20.9', // fail?

    // none of them seem to work on iOS 12!
];

if ( $lie ) {
    // These lies work on iOS 10 and iOS 16 too
    $videoCodecs['mjpeg'] = $lie;
    $videoCodecs['h263' ] = $lie;
    $videoCodecs['mpeg4'] = $lie;
    $videoCodecs['vp8'] = $lie;
}


while ( count( $argv ) > 0 ) {
    $track = array_shift( $argv );
    [ $res, $codec, $ext ] = explode( '.', $track, 3 );
    $filename = "$base.$res.$codec.$ext";
    $playlist = "$filename.m3u8";

    if ( $res === 'audio' ) {
        $name = 'English'; // @fixme use correct unknown marker
        $language = 'en-US'; // @fixme
        $channels = 2; // @fixme
        $uri = urlencode( $playlist );
        $audio[$codec] = "#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=\"$codec\",NAME=\"$name\",LANGUAGE=\"$language\",AUTOSELECT=YES,DEFAULT=YES,CHANNELS=\"$channels\",URI=\"$uri\"";
    } else {
        $bandwidth = 1250000; // @fixme
        $width = 854; // @fixme
        $height = 480; // @fixme
        $fps = 24.0; // @fixme
        $baseLine = "#EXT-X-STREAM-INF:BANDWIDTH=$bandwidth,RESOLUTION={$width}x{$height},FRAME-RATE={$fps}";
        if ( count( $audio ) >= 1 ) {
            foreach ( array_keys( $audio ) as $audioCodec ) {
                $codecs = implode( ',', [
                    $videoCodecs[$codec],
                    $audioCodecs[$audioCodec],
                ] );
                $video[] = "$baseLine,CODECS=\"$codecs\",AUDIO=\"$audioCodec\"";
                $video[] = $playlist;
            }
        } else {
            $codecs = $videoCodecs[$codec];
            $video[] = "$baseLine,CODECS=\"$codecs\"";
            $video[] = $playlist;
        }
    }
}

$header = [
    '#EXTM3U',
];

$lines = array_merge(
    $header,
    array_values( $audio ),
    $video
);

$m3u8 = implode( "\n", $lines );
print "$m3u8\n";