#!/bin/bash

LOGFILE="/home/sandro/m3u/livetv_log.txt"
ARGS=("$@")
IS_LIVE=false
MODIFIED="NEIN"

for arg in "${ARGS[@]}"; do
    if [[ "$arg" == rtsp://* ]] || [[ "$arg" == http://* && "$arg" == *m3u8* ]]; then
        IS_LIVE=true
        break
    fi
done

if [ "$IS_LIVE" = true ]; then
    # Wir bauen die ARGS komplett neu, um die Positionierung zu garantieren
    NEW_ARGS=()
    FOUND_AUDIO=false
    
    for i in "${!ARGS[@]}"; do
        # Wenn wir das Ziel-File erreichen (letztes Argument), 
        # fügen wir unsere Spezial-Parameter davor ein.
        if [ $i -eq $((${#ARGS[@]} - 1)) ]; then
            # Wenn bisher kein Audio-Codec gefunden wurde, erzwingen wir Video + Audio Mapping
            if [ "$FOUND_AUDIO" = false ]; then
                # -map 0:v:0  -> Nimm das erste Video-Signal
                # -map 0:a:0? -> Nimm das erste Audio-Signal (falls vorhanden)
                NEW_ARGS+=("-map" "0:v:0" "-map" "0:a:0?" "-codec:a:0" "libfdk_aac" "-b:a" "128k")
                MODIFIED="JA (Full Map + fdk_aac)"
            fi
        fi

        # Aktuelles Argument hinzufügen
        NEW_ARGS+=("${ARGS[$i]}")

        # Prüfen, ob Jellyfin schon Audio-Parameter liefert (falls ja, ersetzen wir sie)
        if [[ "${ARGS[$i]}" == "-codec:a:0" || "${ARGS[$i]}" == "-c:a" ]]; then
            # Der Codec ist immer das NÄCHSTE Element im Array
            # Das wird im nächsten Schleifendurchlauf durch den Check oben überschrieben oder wir machen es hier:
            # Da das Skript komplexer wird, belassen wir es beim "Erzwingen"-Ansatz, 
            # da dein Log zeigt, dass Jellyfin es eh vergisst.
            FOUND_AUDIO=true 
        fi
    done
    ARGS=("${NEW_ARGS[@]}")
fi

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Live: $IS_LIVE | Mod: $MODIFIED | Cmd: ${ARGS[*]}" >> "$LOGFILE"

exec /usr/lib/jellyfin-ffmpeg/ffmpeg.original "${ARGS[@]}"
