#!/bin/bash
# SPDX-License-Identifier: AGPL-3.0-only
# SPDX-FileCopyrightText: 2025 Univention GmbH

# Abort on nonzero exitstatus [-e]
set -o errexit
# Don't hide errors within pipes
set -o pipefail

download_univention-appcenter-control() {
  if ! [[ -x univention-appcenter-control ]]; then
    curl -s -o univention-appcenter-control https://provider-portal.software-univention.de/appcenter-selfservice/univention-appcenter-control
    chmod +x univention-appcenter-control
    trap 'rm -f "univention-appcenter-control"' EXIT
  fi
}

upload_appcenter_scripts() {
    local ucs_version="5.2"
    local ini_file="$1/ini"
    local app_id="$(awk '/^ID/ {print $3}' "$ini_file")"
    local app_name="$(grep -m 1 '^Name = ' "$ini_file" | cut -d'=' -f2-)"
    local app_version="$(awk '/^Version/ {print $3}' "$ini_file")"
    local app_version_string="${ucs_version}/${app_id}=${app_version}"
    local files=$(find "$1/" -type f ! -name "*.tmpl" | sort)

    echo "---------------------------------------------------------------------"
    echo "Preparing file upload for:${app_name}"
    echo -e "\nID:		${app_id}"
    echo "VERSION:	${app_version}"
    echo -e "Upload target:	${app_version_string}\n"

    echo -e "\nThe following files will be uploaded:\n"
    echo "$files"
    echo "---------------------------------------------------------------------"
    echo ""

    read -n1 -r -p "Press any key to continue or Ctrl-C to abort."
    echo
    echo "Checking if app version exists..."
    if ! ./univention-appcenter-control get "${app_version_string}" --json >/dev/null 2>&1; then
        echo "App version ${app_version_string} does not exist. Creating a new version..."
        read -n1 -r -p "Press any key to create it or Ctrl-C to abort."
        ./univention-appcenter-control new-version "${ucs_version}/${app_id}" "${app_version_string}"
        echo ""
        echo "App version ${app_version_string} created."
    else
        echo "App version ${app_version_string} already exists."
    fi
    echo "Uploading files..."
    ./univention-appcenter-control upload "${app_version_string}" $files
    echo ""
}

if ! [[ -e "${HOME}/.univention-appcenter-user" ]] || ! [[ -e "${HOME}/.univention-appcenter-pwd" ]]; then
  echo -e "\nTo upload the appcenter files to the test-appcenter you will be asked for your username and password."
  echo "Hint: create ~/.univention-appcenter-user and ~/.univention-appcenter-pwd for automatic authentication."
  echo ""
fi

download_univention-appcenter-control

cp provisioning-service/inst.tmpl provisioning-service/inst
sed -i -e "/%PROVISIONING-BACKUP2MASTER-POST%/r 50provisioning-service-backup2master" -e "/%PROVISIONING-BACKUP2MASTER-POST%/d" provisioning-service/inst

upload_appcenter_scripts "provisioning-service"

rm -f provisioning-service/inst
upload_appcenter_scripts "provisioning-service-backend"
