#!/bin/bash
#
# Copyright (C) 2019 OX Software GmbH
# 
# This file is part of OX Automation.
#
# OX Automation is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OX Automation is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OX Automation. If not, see <http://www.gnu.org/licenses/>.
#
#
# Authors:
# Benedikt Kroening <benedikt.kroening@open-xchange.com>
#

set -e
SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P)"
# sourcing some commonly used functions and executing basic checks
source ${SCRIPT_DIR}/../lib/common.bash
source ${SCRIPT_DIR}/../lib/setup.bash
checkRootPrivileges
detectDistribution

if [[ -z "${AS_OFFICE_VERSION}" ]]; then
  # sourcing the default configuration to use
  echo "Warning: Missing environment variable. Sourcing default versions file ..."
  exportProperties ${SCRIPT_DIR}/../setup/versions
fi

## Help text
show_usage() {
echo -n "
Install Open-Xchange Guard packages and optionally enable it in config.
You can either install each component seperatly (manual cluster setup) or all at once.
Please keep in mind that most of this flags are already provided by the configuration.

  $0 [OPTIONS]
    
    --install       The install flag
    --enable        Enable documents in config and restart the backend 
    --disable       Disable (WIP, may not work)
    --restart       Wether or not to restart the all services after the action
    --middleware     Install middleware(api) packages only
    --frontend      Install Frontend packages
    -dcs | --documents-collaboration
    
"
}


### reading config from command line; overriding defaults
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -h|--help)
    show_usage
    exit 0
    shift
    ;;
    --debug)
    echo "WARNING: Debug flag set (--debug)"
    set -x
    shift
    ;;
    --enable)
    DOCUMENTS_ENABLE=true
    shift
    ;;
    --disable)
    DOCUMENTS_ENABLE=false
    shift
    ;;
    --middleware)
    MIDDLEWARE=true
    shift
    ;;
    --frontend)
    FRONTEND=true
    shift
    ;;
    -dcs|--documents-collaboration)
    export INSTALL_DCS=true
    shift
    ;;
    --guard)
    export INSTALL_GUARD=true
    shift
    ;;   
    --install)
    export INSTALL_DOCUMENTS=true
    shift
    ;;    
    # -k|--key)
    # value="$2"
    # shift
    # shift
    # ;;
    --restart)
    RESTART_OX=true
    shift
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

# Install documents middleware and frontend related packages
if [ "$INSTALL_DOCUMENTS" = true ] ; then
  if [[ "${MIDDLEWARE}" = true  ]]; then
    echo "Adding OX Documents middleware packages ..."
    PACKAGES="${PACKAGES} open-xchange-documentconverter-client open-xchange-documents-backend open-xchange-documents-templates open-xchange-documents-ui-common open-xchange-documents-ui-editors open-xchange-documentconverter-api"
  fi

  if [[ "${FRONTEND}" = true  ]]; then
    echo "Adding OX Documents frontend packages ..."
    PACKAGES="${PACKAGES} open-xchange-documents-ui-static open-xchange-documents-help-*"
  fi

  if [[ -n "${PACKAGES}" ]]; then
    installPackagesRetry "${PACKAGES}"
  fi

  # Updating UI themes if script exists
  if [[ -f /opt/open-xchange/appsuite/share/update-themes.sh  ]]; then
    /opt/open-xchange/appsuite/share/update-themes.sh --if-needed
  fi
fi 

# Install and enable Documents collaboration server, client comes below
if [ "$INSTALL_DCS" = true ] ; then
  ${SCRIPT_DIR}/documents-collaboration.sh --install --server
fi

if [[ "${DOCUMENTS_ENABLE}" = true  ]]; then

  # The dcs config is placed here because it is mandatory for documents while the documentconverter part is optional (it has its own mw init scripts)
  if [[ -f /usr/share/open-xchange-documents-collaboration/bin/initdcsdb.sh ]]; then 
    ${SCRIPT_DIR}/../config/init-documents-collaboration.sh
  fi
  # The documents collaboration client requires some special config
  ${SCRIPT_DIR}/documents-collaboration.sh --enable --client --restart

  setOXProperty permissions "text,spreadsheet,presentation,presenter,document_preview" /opt/open-xchange/etc/permissions.properties

  if [ "${INSTALL_GUARD}" = true ]; then
    setOXProperty com.openexchange.capability.guard-docs true /opt/open-xchange/etc/guard-api.properties
  fi

elif [[ "${DOCUMENTS_ENABLE}" = false  ]]; then
  echo ""
  # do something to disable it
fi

if [[ "${RESTART_OX}" = true  ]]; then
  restartService open-xchange
fi