#!/usr/bin/bash

# Workaround for: https://github.com/flatpak/flatpak/issues/3907
set -euo pipefail

# NVIDIA_VERSION_FILE: override in tests to avoid reading real /sys
NVIDIA_VERSION_FILE="${NVIDIA_VERSION_FILE:-/sys/module/nvidia/version}"

SYSTEM_NVIDIA_VERSION=$(cat "${NVIDIA_VERSION_FILE}")
FLATPAK_NVIDIA_VERSION=$(echo "${SYSTEM_NVIDIA_VERSION}" | tr '.' '-')

case "${1:-}" in
    check)
        # Exit 0 if sync is needed (versions mismatch), exit 1 if already in sync
        if flatpak info --system org.freedesktop.Platform.GL.nvidia-"${FLATPAK_NVIDIA_VERSION}" >/dev/null 2>&1 && \
           flatpak info --system org.freedesktop.Platform.GL32.nvidia-"${FLATPAK_NVIDIA_VERSION}" >/dev/null 2>&1; then
            echo "NVIDIA Flatpak runtime ${SYSTEM_NVIDIA_VERSION} already installed"
            exit 1
        fi
        echo "NVIDIA Flatpak runtime ${SYSTEM_NVIDIA_VERSION} needs to be installed"
        exit 0
        ;;
    sync)
        echo "Installing NVIDIA Flatpak runtime version ${SYSTEM_NVIDIA_VERSION}"
        flatpak remote-add --system --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
        flatpak install --system --noninteractive -y flathub \
            org.freedesktop.Platform.GL.nvidia-"${FLATPAK_NVIDIA_VERSION}" \
            org.freedesktop.Platform.GL32.nvidia-"${FLATPAK_NVIDIA_VERSION}"
        echo "Updating system Flatpaks after NVIDIA driver change"
        flatpak update --system --noninteractive -y
        ;;
    *)
        echo "Usage: $0 {check|sync}"
        exit 1
        ;;
esac
