#!/bin/bash

# Exit script if command fails
# -u stops the script on unset variables
# -e stops the script on errors
# -o pipefail stops the script if a pipe fails
set -e

# Get script name
SCRIPT=$(basename "$0")

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: Install Odoo database in Docker container."
    echo "Syntax: $SCRIPT [-d|-m|-c|help]"
    echo "Example: $SCRIPT -d erp -m hr_timesheet -c odoo01 -w all"
    echo "options:"
    echo "  -d    Database name. Defaults to 'odoo'."
    echo "  -m    List of odoo modules. Defaults to 'base'."
    echo "  -c    Docker container. Defaults to 'odoo'."
    echo "  -w    Without demo data."
    echo "  help  Show $SCRIPT manual."
    echo
}

# Show help and exit
if [[ $1 == 'help' ]]; then
    Help
    exit
fi

# Process params
while getopts ":d: :m: :c: :w:" opt; do
  case $opt in
    m) MODULES="$OPTARG";;
    c) CONTAINER="$OPTARG";;
    d) DATABASE="$OPTARG";;
    w) WITHOUT_DEMO="--without-demo=$OPTARG";;
    \?) echo "Invalid option -$OPTARG" >&2
    Help
    exit;;
  esac
done

# Fallback to environment vars and default values
: ${DATABASE:='odoo'}
: ${CONTAINER:='odoo'}

# Install with Docker exec
if [ "$MODULES" != '' ]; then
  echo "Install $MODULES for database $DATABASE on container $CONAINER."
  docker exec -it $CONTAINER bin/bash -c "odoo -c /etc/odoo/odoo.conf -i $MODULES -d $DATABASE --db_host \$HOST -r \$USER -w \$PASSWORD $WITHOUT_DEMO --stop-after-init --no-http" && docker restart $CONTAINER
else
  echo "Init database $DATABASE on container $CONAINER."
  docker exec -it $CONTAINER bin/bash -c "odoo -c /etc/odoo/odoo.conf -i base -d $DATABASE --db_host \$HOST -r \$USER -w \$PASSWORD $WITHOUT_DEMO --stop-after-init --no-http" && docker restart $CONTAINER
fi

echo "The Odoo installation for $CONTAINER has finished."
