#!/bin/sh
set -e

if [ $# -lt 2 ]; then
	echo Usage: $0 platform source
	echo "  FLATPAK_RUNTIME_VERSION: version of the GNOME SDK runtime (default: 50)"
	echo "  FLATPAK_GPG_KEY: GPG key to sign the repository and the bundle (optional)"
	exit 1
fi

LOG=`pwd`/flatpak.log
>$LOG
set -- $1 $2
. ./packaging/config.sh
ISE_EIFFEL=`cd $ISE_EIFFEL && pwd`

# Determine architecture
case "x$ISE_PLATFORM" in
	"xlinux-x86-64") ARCH=x86_64;;
	"xlinux-arm64") ARCH=aarch64;;
	*) echo "No flatpak architecture mapping for ISE_PLATFORM=$ISE_PLATFORM"; exit 1;;
esac

: ${FLATPAK_RUNTIME_VERSION:=50}
FLATPAK_STAGE_DIR=$FLATPAK_DIR/stage
FLATPAK_BUILD_DIR=$FLATPAK_DIR/build
FLATPAK_REPO_DIR=$FLATPAK_DIR/repo
FLATPAK_MANIFEST=$FLATPAK_DIR/$APP_ID.json
FLATPAK_BUNDLE=`pwd`/$PRODUCT-$VERSION-$ARCH.flatpak

rm -rf $FLATPAK_STAGE_DIR
mkdir -p $FLATPAK_STAGE_DIR

# Prepare launchers, desktop entry, icon and AppStream metadata
LAUNCHER_DIR=$FLATPAK_STAGE_DIR/bin
LAUNCHER_ISE_EIFFEL=/app/lib/eiffelstudio
LAUNCHER_SUFFIX=
. $PACKAGING_DIR/launcher.sh

DESKTOP_FILE=$FLATPAK_STAGE_DIR/$APP_ID.desktop
DESKTOP_EXEC=estudio
DESKTOP_ICON=$APP_ID
. $PACKAGING_DIR/desktop.sh
cp $PACKAGING_DIR/logo.png $FLATPAK_STAGE_DIR/$APP_ID.png

METAINFO_FILE=$FLATPAK_STAGE_DIR/$APP_ID.metainfo.xml
METAINFO_DESKTOP_ID=$APP_ID.desktop
. $PACKAGING_DIR/metainfo.sh

. $FLATPAK_DIR/manifest.sh

# Build the application into a local repository, then export it as a single-file bundle
GPG_OPTION=
if [ -n "$FLATPAK_GPG_KEY" ]; then
	GPG_OPTION="--gpg-sign=$FLATPAK_GPG_KEY"
fi
INSTALL_DEPS_OPTION=
if flatpak remotes --columns=name | grep -qx flathub; then
	INSTALL_DEPS_OPTION="--install-deps-from=flathub"
fi

echo "Building $APP_ID ($ARCH) flatpak, branch $RELEASE"
flatpak-builder --arch=$ARCH --force-clean --disable-rofiles-fuse --user $INSTALL_DEPS_OPTION \
	--default-branch=$RELEASE --repo=$FLATPAK_REPO_DIR $GPG_OPTION \
	--state-dir=$FLATPAK_DIR/.flatpak-builder \
	$FLATPAK_BUILD_DIR $FLATPAK_MANIFEST >>$LOG 2>>$LOG

echo "Exporting bundle $FLATPAK_BUNDLE"
flatpak build-bundle --arch=$ARCH $GPG_OPTION \
	--runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo \
	$FLATPAK_REPO_DIR $FLATPAK_BUNDLE $APP_ID $RELEASE >>$LOG 2>>$LOG

# Clean up all build files
rm -rf $FLATPAK_STAGE_DIR $FLATPAK_BUILD_DIR $FLATPAK_REPO_DIR $FLATPAK_DIR/.flatpak-builder
rm -f $FLATPAK_MANIFEST
