#!/bin/sh
# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 2; coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: Michael Terry

# This script dumps you in a special shell, ideal for testing deja-dup.
# It will point at the locally built executables and plugins.  It will
# point at a custom dconf location and $HOME.
#
# There are three modes:
# 1) default: called as 'shell', it simply points at the built versions
# 2) local: called as 'shell-local', it also sets up a fake env
# 3) system: called as 'shell-system', it sets ups a fake env and points at
#            system executables

TOPDIR=$(readlink -e "$(dirname ${0})/..")
BUILDDIR="${TOPDIR}/builddir"

SHNAME=$(basename $0)

# Create temp environment
ROOTDIR=$(mktemp -d --tmpdir dd.XXXXXXXXXX)
export DEJA_DUP_TEST_ROOT="${ROOTDIR}"

RUN_CMD=
ARGS=$@
if [ -n "$ARGS" ]; then
  echo "$ARGS" > "$ROOTDIR/runscript.sh"
  RUN_CMD="sh '$ROOTDIR/runscript.sh'"
fi

run_shell()
{
  ARGS=$@
  if [ -z "$ARGS" ]; then
    export PS1='\[\e[1;32m\]deja-dup\$\[\e[0m\] '
    cd "${ROOTDIR}"
    ARGS="bash --norc"

    # Explain the details
    echo "Your data playground and home directory is ${ROOTDIR}"
    echo "Run deja-dup or deja-dup-monitor to test."
    echo "Run exit 0 to leave."
    echo "Run exit 1 to leave and keep data playground intact."
  fi
  CMD="$ARGS"
  if [ "$SHNAME" != "shell" ]; then
    CMD="dbus-run-session -- $ARGS"
  fi
  if sh -c "$CMD"; then
    rm -rf "${ROOTDIR}" # Cleanup on clean exit
    exit 0
  else
    exit $?
  fi
}


if [ "$SHNAME" = "shell" ]; then
  mkdir -p "${ROOTDIR}/share/glib-2.0/schemas"
  cp "${BUILDDIR}"/data/org.gnome.DejaDup*.gschema.xml "${ROOTDIR}/share/glib-2.0/schemas"
  glib-compile-schemas "${ROOTDIR}/share/glib-2.0/schemas"
  export XDG_DATA_DIRS="${ROOTDIR}/share:${XDG_DATA_DIRS}"

  export DEJA_DUP_MONITOR_EXEC="${BUILDDIR}/deja-dup/monitor/deja-dup-monitor"
  export PATH="${BUILDDIR}/deja-dup/monitor:${BUILDDIR}/deja-dup:${PATH}"

  run_shell $RUN_CMD
fi


OLD_HOME="${HOME}"
HOME="${ROOTDIR}"

mkdir -p "${ROOTDIR}/cache"
export XDG_CACHE_HOME="${ROOTDIR}/cache"

mkdir -p "${ROOTDIR}/config"
export XDG_CONFIG_HOME="${ROOTDIR}/config"

mkdir -p "${ROOTDIR}/gnupg"
export GNUPGHOME="${ROOTDIR}/gnupg"

if [ -f "${OLD_HOME}/.config/user-dirs.dirs" -a -f "${OLD_HOME}/.config/user-dirs.locale" ]; then
  cp "${OLD_HOME}/.config/user-dirs.dirs" "${XDG_CONFIG_HOME}/user-dirs.dirs"
  cp "${OLD_HOME}/.config/user-dirs.locale" "${XDG_CONFIG_HOME}/user-dirs.locale"
  . "${XDG_CONFIG_HOME}/user-dirs.dirs"
  for d in DESKTOP DOCUMENTS DOWNLOAD MUSIC PICTURES PUBLICSHARE TEMPLATES VIDEOS; do
    eval mkdir -p "\${XDG_${d}_DIR}"
  done
fi


# For convenience, make some potentially useful folders
mkdir -p "${ROOTDIR}/source"
mkdir -p "${ROOTDIR}/backup"
mkdir -p "${ROOTDIR}/restore"


# If we are in local mode, point at our own data files and built objects
SHNAME=$(basename $0)
if [ "$SHNAME" = "shell-local" ]; then
  mkdir -p "${ROOTDIR}/share/glib-2.0/schemas"
  cp "${BUILDDIR}"/data/org.gnome.DejaDup*.gschema.xml "${ROOTDIR}/share/glib-2.0/schemas"
  glib-compile-schemas "${ROOTDIR}/share/glib-2.0/schemas"
  export XDG_DATA_HOME="${ROOTDIR}/share"
  export XDG_DATA_DIRS="${XDG_DATA_HOME}:${XDG_DATA_DIRS}"

  mkdir -p "${XDG_DATA_HOME}/Trash"

  export DEJA_DUP_MONITOR_EXEC="${BUILDDIR}/deja-dup/monitor/deja-dup-monitor"
  export PATH="${BUILDDIR}/deja-dup/monitor:${BUILDDIR}/deja-dup:${PATH}"
else
  export DEJA_DUP_TEST_SYSTEM=1
fi

run_shell $RUN_CMD
