#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
# SPDX-FileCopyrightText: 2026 Nate Graham <nate@kde.org>

set -eu

FACTORY_DIR="/usr/share/factory/var/lib/flatpak/app"
FACTORY_RUNTIME_DIR="/usr/share/factory/var/lib/flatpak/runtime"
REPO_CONFIG="/usr/share/factory/var/lib/flatpak/repo/config"
DEFAULT_REMOTE="flathub"
INSTALLED_APPS=$(tr '\n' ' ' <<< $(flatpak list --columns=application))
EVER_PREINSTALLED_APPS_FILE="/var/lib/kde-linux/ever-preinstalled-flatpak-apps"
EVER_PREINSTALLED_APPS=$(tr '\n' ' ' < $EVER_PREINSTALLED_APPS_FILE)

echo "Looking in $FACTORY_DIR and $FACTORY_RUNTIME_DIR for new pre-installed apps and addons that need installing…"

APPS=$(ls $FACTORY_DIR)
ADDONS=$(find $FACTORY_RUNTIME_DIR -maxdepth 1 -type d -name "*.Addon.*" -printf "%f\n")

for APP in $APPS $ADDONS; do

    # trim trailing slash
    APP=$(basename "$APP")

    # Skip if it's already installed
    if [[ " $INSTALLED_APPS " == *" $APP "* ]]; then
        echo "Skipping $APP (already installed)"
        continue
    fi

    # Skip it if it was ever preinstalled. (If so, then the user must have chosen
    # to uninstall it, so we don't want to reinstall it.)
    if [[ " $EVER_PREINSTALLED_APPS " == *" $APP "* ]]; then
        echo "Skipping $APP (was preinstalled, but then uninstalled by user)"
        continue
    fi

    REMOTE="$DEFAULT_REMOTE"

    # See if we have a special repo to install it from
    NON_RDNS_NAME="${APP#*.*.}"
    SPECIAL_APP_REMOTE_NAME=$(rg "\[remote.*${NON_RDNS_NAME}" "$REPO_CONFIG" | head -n 1 | cut -d '"' -f 2 || true)
    if [[ -n "$SPECIAL_APP_REMOTE_NAME" ]]; then
        echo "$APP needs to be installed from a special repo: $SPECIAL_APP_REMOTE_NAME"
        REMOTE="$SPECIAL_APP_REMOTE_NAME"
        SPECIAL_APP_REMOTE_URL=$(rg -A 1 "$SPECIAL_APP_REMOTE_NAME" "$REPO_CONFIG" | rg url | cut -d "=" -f 2 || true)
        SPECIAL_APP_REMOTE_FLATPAK_REPO="${SPECIAL_APP_REMOTE_URL}${SPECIAL_APP_REMOTE_NAME}.flatpakrepo"
        echo "Adding its repository from $SPECIAL_APP_REMOTE_FLATPAK_REPO"
        flatpak remote-add --if-not-exists "$SPECIAL_APP_REMOTE_NAME" "$SPECIAL_APP_REMOTE_FLATPAK_REPO"
        # In case the remote already existed but with GPG verification disabled...
        flatpak remote-modify --gpg-verify "$SPECIAL_APP_REMOTE_NAME"
    fi

    echo "Installing $APP from $REMOTE…"
    # If the app is successfully installed, record that we preinstalled it,
    # so that we know not to reverse a future uninstall by the user.
    flatpak install --system --noninteractive --assumeyes "$REMOTE" "$APP" &&
        echo $APP >> $EVER_PREINSTALLED_APPS_FILE
done
