#!/bin/bash

####################################################
# Wird von 200.sh getriggert
# Setzt Audio-Ausgang (hdmi/analog) und Lautstärke
# gem. mc.cfg – AUDIO_OUT und AUDIO_VOL sind optional
####################################################

CFG=/home/snowtv/bin/mc.cfg
LOG=/var/log/stv.log
BIN=/home/snowtv/bin

AUDIO_OUT_FILE="$BIN/audio_out.txt"
AUDIO_VOL_FILE="$BIN/audio_vol.txt"

export XDG_RUNTIME_DIR="/run/user/$(id -u)"
export PULSE_SERVER="unix:/run/user/$(id -u)/pulse/native"

_log() { echo "$(date)  INFO: $*" | tee -a "$LOG"; }

# Felder aus mc.cfg lesen (optional – Script endet lautlos wenn nicht vorhanden)
AUDIO_OUT_NEW=$(grep '^AUDIO_OUT=' "$CFG" | awk -F= '{print $2}' | tr -d '\r')
AUDIO_VOL_NEW=$(grep '^AUDIO_VOL=' "$CFG" | awk -F= '{print $2}' | tr -d '\r')

[ -z "$AUDIO_OUT_NEW" ] && [ -z "$AUDIO_VOL_NEW" ] && exit 0

# Karte dynamisch ermitteln
CARD=$(pactl list cards short | awk 'NR==1{print $2}')
if [ -z "$CARD" ]; then
    _log "changeaudio: keine PulseAudio-Karte gefunden – übersprungen"
    exit 0
fi

# Audio-Ausgang setzen
if [ -n "$AUDIO_OUT_NEW" ]; then
    AUDIO_OUT_OLD=$(cat "$AUDIO_OUT_FILE" 2>/dev/null)
    if [ "$AUDIO_OUT_OLD" != "$AUDIO_OUT_NEW" ]; then
        case "$AUDIO_OUT_NEW" in
            hdmi)   PROFILE="output:hdmi-stereo+input:analog-stereo";   PROFILE_FALLBACK="output:hdmi-stereo" ;;
            analog) PROFILE="output:analog-stereo+input:analog-stereo"; PROFILE_FALLBACK="output:analog-stereo" ;;
            *)
                _log "changeaudio: unbekannter AUDIO_OUT-Wert '$AUDIO_OUT_NEW' – übersprungen"
                PROFILE=""
                ;;
        esac
        if [ -n "$PROFILE" ]; then
            # Manche Karten (z.B. Intel HDA ohne separaten Analog-Eingang) bieten das
            # kombinierte Profil "+input:analog-stereo" nicht an ("Entität nicht vorhanden")
            # → auf reines Output-Profil zurückfallen
            if pactl set-card-profile "$CARD" "$PROFILE" 2>/dev/null; then
                echo "$AUDIO_OUT_NEW" > "$AUDIO_OUT_FILE"
                _log "changeaudio: Audio-Ausgang → $AUDIO_OUT_NEW ($PROFILE)"
            elif pactl set-card-profile "$CARD" "$PROFILE_FALLBACK" 2>/dev/null; then
                echo "$AUDIO_OUT_NEW" > "$AUDIO_OUT_FILE"
                _log "changeaudio: Audio-Ausgang → $AUDIO_OUT_NEW ($PROFILE_FALLBACK, Fallback ohne Analog-Input)"
            else
                _log "changeaudio: ERROR – pactl set-card-profile fehlgeschlagen (versucht: $PROFILE, $PROFILE_FALLBACK)"
            fi
            # Neuen Default-Sink setzen und laufende Streams verschieben
            sleep 0.5
            NEW_SINK=$(pactl list sinks short | awk 'NR==1{print $2}')
            if [ -n "$NEW_SINK" ]; then
                pactl set-default-sink "$NEW_SINK"
                pactl list sink-inputs short | awk '{print $1}' | \
                    xargs -r -I{} pactl move-sink-input {} "$NEW_SINK"
                _log "changeaudio: Default-Sink → $NEW_SINK, Streams verschoben"
            fi
        fi
    fi
fi

# Lautstärke setzen
if [ -n "$AUDIO_VOL_NEW" ]; then
    AUDIO_VOL_OLD=$(cat "$AUDIO_VOL_FILE" 2>/dev/null)
    if [ "$AUDIO_VOL_OLD" != "$AUDIO_VOL_NEW" ]; then
        if pactl set-sink-volume @DEFAULT_SINK@ "${AUDIO_VOL_NEW}%"; then
            echo "$AUDIO_VOL_NEW" > "$AUDIO_VOL_FILE"
            _log "changeaudio: Lautstärke → ${AUDIO_VOL_NEW}%"
        else
            _log "changeaudio: ERROR – pactl set-sink-volume fehlgeschlagen (PULSE_SERVER=$PULSE_SERVER)"
        fi
    fi
fi

exit 0
