#!/bin/bash
set -e


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

# Display Help
Help() {
  echo
  echo "$SCRIPT"
  echo
  echo "Description: Duplicate Odoo database."
  echo "Syntax: $SCRIPT [-p|-d|-h|-n|-v|help]"
  echo "Example: $SCRIPT -p secret -d odoo -h https://odoo.example.org" -n odoo2
  echo "options:"
  echo "  -p    Odoo master password. Defaults to \$ODOO_MASTER_PASSWORD env var and 'admin'."
  echo "  -d    Database name."
  echo "  -h    Odoo host. Defaults to 'http://localhost:8069'."
  echo "  -n    New database name."
  echo "  -v    Show $SCRIPT version."
  echo "  help  Show $SCRIPT manual."
  echo
}

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

# Process params
while getopts ":p: :d: :h: :n: :v" opt; do
    case $opt in
        p) PASSWORD="$OPTARG";;
        d) DATABASE="$OPTARG";;
        n) NEW_DATABASE="$OPTARG";;
        h) ODOO_HOST="$OPTARG";;
        v) echo "$SCRIPT version $VERSION"
        exit 0
        ;;
        \?) echo "Invalid option -$OPTARG" >&2
        Help
        exit;;
    esac
done

# Fallback to environment vars and default values
: ${PASSWORD:=${ODOO_MASTER_PASSWORD:='odoo'}}
: ${ODOO_HOST:='http://localhost:8069'}

# Verify variables
[[ -z "$DATABASE" ]] && { echo "Parameter -d|database is empty" ; exit 1; }
[[ -z "$NEW_DATABASE" ]] && { echo "Parameter -n|new database is empty" ; exit 1; }
[[ "$DATABASE" == "$NEW_DATABASE" ]] && { echo "Parameter -d and -h cannot be the same" ; exit 1; }

echo "Duplicating Odoo database $DATABASE to $NEW_DATABASE ..."

# Request duplication with curl
RESPONSE=$(curl \
    -F "master_pwd=${PASSWORD}" \
    -F "name=${DATABASE}" \
    -F "new_name=${NEW_DATABASE}" \
    "${ODOO_HOST%/}/web/database/duplicate")

echo "$RESPONSE" | grep 'error' && exit 1

echo "The duplication of Odoo database $DATABASE to $NEW_DATABASE has finished."
