#!/bin/bash

ENV_FILE="/run/user/$(id -u)/.external_display_env"

kill_pair_and_cleanup() {
    local pid1="$1"
    local pid2="$2"

    if [ -n "$pid1" ] && kill -0 "$pid1" 2>/dev/null; then
        kill "$pid1" 2>/dev/null || true
    fi
    if [ -n "$pid2" ] && kill -0 "$pid2" 2>/dev/null; then
        kill "$pid2" 2>/dev/null || true
    fi

    sleep 1

    if [ -n "$pid1" ] && kill -0 "$pid1" 2>/dev/null; then
        kill -9 "$pid1" 2>/dev/null || true
    fi
    if [ -n "$pid2" ] && kill -0 "$pid2" 2>/dev/null; then
        kill -9 "$pid2" 2>/dev/null || true
    fi
}

load_external_display_env() {
    if [ ! -f "$ENV_FILE" ]; then
        return 0
    fi

    echo "Loading external display environment from $ENV_FILE"

    while IFS= read -r line || [ -n "$line" ]; do
        case "$line" in
            ''|\#*)
                continue
                ;;
            *=*)
                key="${line%%=*}"
                value="${line#*=}"

                case "$key" in
                    MUTTER_WAYLAND_NESTED_DISPLAY_RESOLUTION)
                        export "$key=$value"
                        echo "Exported $key=$value"
                        ;;
                    *)
                        echo "Ignoring unsupported key: $key"
                        ;;
                esac
                ;;
            *)
                echo "Ignoring malformed line: $line"
                ;;
        esac
    done < "$ENV_FILE"
}

load_external_display_env

if [ -x /usr/libexec/mutter-furios-screencast-streamer ]; then
    echo "mutter-furios-screencast-streamer found, using mutter wayland backend"

    gsettings set org.gnome.mutter experimental-features []

    chmod 1777 /tmp/.X11-unix/

    XDG_SESSION_TYPE=wayland
    GNOME_SHELL_SKIP_DBUS=1
    GNOME_SHELL_WAYLAND_SOCKET=wayland-1
    GNOME_SHELL_DISABLE_OSK=1
    export XDG_SESSION_TYPE
    export GNOME_SHELL_SKIP_DBUS
    export GNOME_SHELL_WAYLAND_SOCKET
    export GNOME_SHELL_DISABLE_OSK
    export MUTTER_WAYLAND_NESTED_DISPLAY_RESOLUTION

    echo "Starting mutter DRM streamer"
    /usr/libexec/mutter-furios-screencast-streamer &
    STREAMER_PID=$!

    echo "Starting GNOME Shell with Wayland..."
    gnome-shell --wayland --nested &
    SHELL_PID=$!

    wait -n "$STREAMER_PID" "$SHELL_PID"
    echo "One process exited. stopping both..."

    kill_pair_and_cleanup "$STREAMER_PID" "$SHELL_PID"
else
    echo "No method for external display available"
fi
