#!/usr/bin/env bash
set -e

script=$(basename "$0")
version="1.0.2"

help() {
    echo
    echo "$script"
    echo
    echo 'Description: Drop Odoo database in Docker container.'
    echo "Syntax: $script [-d|-c|-V|help]"
    echo 'Example: $script -c odoo01 -d erp'
    echo 'Options:'
    echo '  -c    Docker container. Defaults to '\''odoo'\''.'
    echo '  -d    Database name.'
    echo "  -V    Show $script version."
    echo "  help  Show $script manual."
    echo
}

if [[ "$1" == 'help' ]]; then
    help
    exit
fi

container='odoo'

while getopts ':c: :d: :V' opt; do
    case $opt in
        c) container="$OPTARG";;
        d) database="$OPTARG";;
        V) echo "$script version $version"; exit 0;;
        \?) echo >&2 "Invalid option -$OPTARG"; help; exit 1;;
    esac
done

[[ -z "$database" ]] && { echo >&2 'Parameter -d|database is empty'; exit 1; }

container_id=$(docker ps -f "name=$container" -q | head -n1)
[[ -z "$container_id" ]] && { echo >&2 "Container id for $container not found"; exit 1; }

docker_exec="docker exec $container_id"
docker_exec_root="docker exec --user root $container_id"

echo "Kill database connections on $database"
query="SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$database';"
$docker_exec sh -c "psql postgres://\$PGUSER:\$PGPASSWORD@\$PGHOST:5432/postgres -c \"$query\""

echo "Drop database $database"
query="DROP DATABASE \\\"$database\\\";"
$docker_exec sh -c "psql postgres://\$PGUSER:\$PGPASSWORD@\$PGHOST:5432/postgres -c \"$query\"" || true

echo "Remove filestore $database"
$docker_exec_root sh -c "rm -rf /var/lib/odoo/filestore/$database"

echo "The Odoo database $database has been removed."