#!/bin/bash

################################################
#   Wird von ini.sh getriggert
#   Script regelt Playout des Mediaplayers
################################################

setx () {
	# Als Array statt String einlesen: xrandr braucht die Flags als getrennte
	# Argumente. Mit "$RES" als einzelnem String (vorherige Version) scheiterte
	# xrandr mit "unrecognized option '...'", weil der gesamte Wert (inkl.
	# führendem Leerzeichen durch das entfernte erste Feld "xrandr") als EIN
	# Argument übergeben wurde. Gefunden 03.10.2026 auf Player 103 (Labor).
	RES=( $(grep XRANDR </home/snowtv/bin/mc.cfg | awk -F= '{ st = index($0,"=");print substr($0,st+1)}' | awk '!($1="")' | tr -d '\r') )
	DISPLAY=:0.0 /usr/bin/xrandr "${RES[@]}"

	# Bei mehreren aktiven Outputs (Extended-/Mirror-Screen) zu einem kombinierten
	# RandR-1.5-Monitor zusammenfassen, sonst spannt Chromiums --kiosk nach einem
	# Neustart (dieser Codepfad läuft z.B. nach dem täglichen 04:00-Reboot) nur
	# über einen einzelnen physischen Output. Identische Logik wie in
	# changexrandr.sh, siehe dort für Details.
	ACTIVE_OUTPUTS=$(DISPLAY=:0.0 xrandr --query | awk '/ connected /{print $1}')
	if [ "$(echo "$ACTIVE_OUTPUTS" | grep -c .)" -gt 1 ]; then
		COMBINED_GEOM=$(DISPLAY=:0.0 xrandr --query | sed -n 's/.*current \([0-9]*\) x \([0-9]*\).*/\1\/0x\2\/0/p')
		OUTPUT_LIST=$(echo "$ACTIVE_OUTPUTS" | paste -sd, -)
		DISPLAY=:0.0 xrandr --setmonitor combined-wall "${COMBINED_GEOM}+0+0" "$OUTPUT_LIST"
	else
		DISPLAY=:0.0 xrandr --delmonitor combined-wall 2>/dev/null
	fi

	/home/snowtv/bin/dispon.sh
}


CHROMIUMSTAT=$(pgrep chromium || echo down)			# Prüfen, ob Chromium läuft
AIRTIME="$(/home/snowtv/bin/getairtime.sh)"	# Airtime abfragen

# GDS: timegds.json periodisch aus mc.cfg nachführen (nicht nur bei erkannter
# mc.cfg-Änderung via 200.sh) – routine.py liest nur timegds.json, nie mc.cfg
# direkt, würde eine verpasste 200.sh-Aktualisierung sonst nicht bemerken
if [ -f /home/snowtv/bin/.gds_installed ]; then
	/home/snowtv/bin/gdsairtime.sh
fi

# Wenn Sendezeit ist, dann
if [ "$AIRTIME" == "0" ]; then
	# Wenn Browser nicht läuft, dann soll dieser gestartet werden
	if [ "$CHROMIUMSTAT" == "down" ]; then
		setx
		pkill feh
		/home/snowtv/bin/chrom.sh && \
		echo "$(date)  INFO: airtime, Playout gestartet..." | tee -a /var/log/stv.log
	# Wenn Browser schon läuft, nur Crash-Check
	elif [ "$CHROMIUMSTAT" != "down" ]; then
		/home/snowtv/bin/chromon.sh
		# Reaktionsfaehigkeits-Check (haengender Renderer ohne Crash-Dump) -
		# no-op ausser bei explizitem CDF=on in mc.cfg, siehe cdp_check.py
		python3 /home/snowtv/bin/cdp_check.py
	fi

# Wenn keine Sendezeit ist
# dann soll Playout stoppen
# dann Display ausschalten
elif [ "$AIRTIME" == "1" ]; then
	if [ "$CHROMIUMSTAT" == "down" ]; then
		echo "$(date)  INFO: no airtime, Playout ist gestoppt" | tee -a /var/log/stv.log
		/home/snowtv/bin/dispoff.sh
	else
		echo "$(date)  INFO: no airtime, stoppe Playout, schalte Display aus..." | tee -a /var/log/stv.log
		killall chromium
		/home/snowtv/bin/dispoff.sh
	fi
fi

exit 0
