#!/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)"

source ${SCRIPT_DIR}/../lib/common.bash

## Help text
show_usage() {
echo -n "

Build docker images with the help of the ox-installer scripts

Easiest way to get a working image:
    $ ${0} 

    Per component options (can be combined):

    Installation types (not combineable):
        --singlenode    This will install and init an basic OX instance (db, mw, fe)
        --cluster       This will create several images for deploying some docker-compose cluster
    Configuration options:
        

Examples:

"
}

### 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
    ;;
    # -t|--type)
    # INSTALL_TYPE="$2"
    # shift
    # shift
    # ;;
    --middleware)
    export INSTALL_MIDDLEWARE=true
    shift
    ;;
    --frontend)
    export INSTALL_FRONTEND=true
    shift
    ;;
    --guard)
    export INSTALL_GUARD=true
    shift
    ;;
    --documents)
    export INSTALL_DOCUMENTS=true
    shift
    ;;
    --documentconverter)
    export INSTALL_DOCUMENTCONVERTER=true
    shift
    ;;

    -s|--singlenode)
    export INSTALL_TYPE=singlenode

    shift
    ;;

    --cluster)
    export INSTALL_TYPE=cluster

    shift
    ;;
    --config)
    exportProperties "$2"
    shift
    shift
    ;;
    # --repo-guard)
    # OX_REPO_GUARD="$2"
    # echo "WARNING: Using $OX_REPO_GUARD as guard repository source"
    # shift 
    # shift 
    # ;;
    *) # unknown option
    echo "Unknonwn option: $1"
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters


if [[ -z "${INSTALL_TYPE}" ]]; then
    echo "No build type was specified. (either singlenode or cluster)"
    #export INSTALL_TYPE=singlenode
    exit 99
fi

STARTED_AT=$(date)
if [[ "${INSTALL_TYPE}" == "singlenode" ]]; then
    # ensure that all components will be "force" installed if on singlenode
    exportProperties ${SCRIPT_DIR}/singlenode/config
    docker build --no-cache --rm \
                    --build-arg ARG_INSTALL_FRONTEND=true \
                    --build-arg ARG_INSTALL_MIDDLEWARE=true \
                    --build-arg ARG_INSTALL_GUARD=true \
                    --build-arg ARG_INSTALL_DOCUMENTS=false \
                    --build-arg ARG_INSTALL_DOCUMENTCONVERTER=false \
                    -f ${SCRIPT_DIR}/singlenode/Dockerfile \
                    -t singlenode:latest ${SCRIPT_DIR}/../
elif [[ "${INSTALL_TYPE}" == "cluster" ]]; then
    #exportProperties ${SCRIPT_DIR}/cluster/config

    # TODO: propper image tag versioning
    exportProperties ${SCRIPT_DIR}/singlenode/config
    echo "Building OX frontend image ..."
    docker build --no-cache --rm -f ${SCRIPT_DIR}/cluster/frontend.Dockerfile -t open-xchange-frontend:latest ${SCRIPT_DIR}/../

    echo "Building OX middleware image ..."
    docker build --no-cache --rm -f ${SCRIPT_DIR}/cluster/middleware.Dockerfile -t open-xchange-middleware:latest ${SCRIPT_DIR}/../
else
    # let the environment variables do the selection magic 

    echo "Not yet implemented"
    exit 99
fi



echo ""
# pushd ${SCRIPT_DIR}/..



# popd

FINISHED_AT=$(date)
echo "====================================================================================="
echo "Started at:   $STARTED_AT"
echo "Finished at:  $FINISHED_AT"
