#!/bin/bash
set -e

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

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: Drop Odoo database in Docker container."
    echo "Syntax: $SCRIPT [-d|-c|-v|help]"
    echo "Example: $SCRIPT -d erp -c odoo01"
    echo "options:"
    echo "  -d    Database name. Defaults to 'odoo'."
    echo "  -c    Docker container. Defaults to 'odoo'."
    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 ":c: :d: :v" opt; do
    case $opt in
        c) CONTAINER="$OPTARG";;
        d) DATABASE="$OPTARG";;
        v) echo "$SCRIPT version $VERSION"
        exit 0
        ;;
        \?) echo "Invalid option -$OPTARG" >&2
        Help
        exit;;
    esac
done

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

# Switch container name with id
CONTAINER_ID=$(docker ps -f "name=$CONTAINER" -q | tail -n1)

# Set alias
docker_exec_bash="docker exec $CONTAINER_ID /bin/bash -c"
docker_exec_root_bash="docker exec --user root $CONTAINER_ID /bin/bash -c"

# Kill datbase connections
echo "Kill database connections on $DATABASE"
QUERY="SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DATABASE';"
$docker_exec_bash "psql postgres://\$USER:\$PASSWORD@\$HOST:5432/postgres -c \"$QUERY\""

# Drop database
echo "Drop database $DATABASE"
QUERY="DROP DATABASE \\\"$DATABASE\\\";" # Escape quotes twice
$docker_exec_bash "psql postgres://\$USER:\$PASSWORD@\$HOST:5432/postgres -c \"$QUERY\""

# Remove filestore
echo "Remove filestore $DATABASE"
$docker_exec_root_bash "rm -rf /var/lib/odoo/filestore/$DATABASE"

# Notify of removal
echo "The Odoo database $DATABASE has been removed."
