#!/usr/bin/sh

die() {
  echo "$1"
  exit 1
}

[ -n "$XDG_RUNTIME_DIR" ] || XDG_RUNTIME_DIR=/tmp

. $APPDIR/AppRun.env

while [ $# -gt 0 ] ; do
  case "$1" in
    --ls)
      shift
      echo ls -ARl $* $APPDIR
      ls -ARl $* $APPDIR
      exit $?
      ;;
    --keep)
      shift
      KEEP=1
      ;;
    --debug)
      shift
      FU_OPTS="-d"
      DEBUG=1
      ;;
    --emu)
      shift
      EMU="$1"
      shift
      ;;
    *)
      break
      ;;
  esac
done

APP_TMP=$XDG_RUNTIME_DIR/dosemu2apps/$APP_NAME
APP_TMPDIR=$APP_TMP/app
mkdir -p $APP_TMPDIR
APP_LOCALDIR=~/.local/state/dosemu2apps/$APP_NAME
mkdir -p $APP_LOCALDIR
FUSE_LOCALDIR=~/.fuse_overlayfs/dosemu2apps/$APP_NAME
mkdir -p $FUSE_LOCALDIR
mnt() {
  fuse-overlayfs -o lowerdir=$APP_DIR -o upperdir=$APP_LOCALDIR \
    -o workdir=$FUSE_LOCALDIR \
    -o squash_to_uid=$(id -u) -o squash_to_gid=$(id -g) \
    $FU_OPTS $APP_TMPDIR || \
        die "fuse-overlayfs failed"
  [ -z "$DEBUG" ] || exit 0
}
um() {
  FM=`which fusermount3 2>/dev/null`
  [ -n "$FM" ] || FM=`which fusermount 2>/dev/null`
  [ -n "$FM" ] || die "fusermount not found"
  $FM -u $APP_TMPDIR
}
if ! mnt; then
  # if it left mounted from last start, try unmount first
  um
  mnt || die "fuse-overlayfs failed"
fi
cln() {
  um
  rm -rf $FUSE_LOCALDIR
}

die2() {
  cln
  die $*
}

if [ -n "$KEEP" ]; then
    echo "Mounted to $APP_TMPDIR"
    exit 0
fi

if [ "$NEWENV" = "1" ]; then
    ARGS="--Flocal_dir $APPDIR"
fi

if which "$EMU" >/dev/null 2>&1; then
  $EMU $ARGS $APP_TMPDIR/$APP_EXE $*
else
  flatpak remote-add --if-not-exists --no-gpg-verify --user \
    dosemu2 https://dosemu2.github.io/dosemu2/flatpak/repo || \
    die2 "unable to add flatpak remote"
  echo "gpg-verify=false" >> ~/.local/share/flatpak/repo/config
  echo "gpg-verify-summary=false" >> ~/.local/share/flatpak/repo/config
  flatpak install -y --user dosemu2 io.github.dosemu2.dosemu2 || \
    die2 "unable to install dosemu2 flatpak"
  flatpak run --user io.github.dosemu2.dosemu2 $ARGS \
    $APP_TMPDIR/$APP_EXE $*
fi

# cleanup
cln
