#!/bin/bash
set -e

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

# Display Help
Help() {
    echo
    echo "$SCRIPT"
    echo
    echo "Description: Manage Odoo users."
    echo "Syntax: $SCRIPT [-c|-d|-a[enable,disable,list,reset]|-i|-v|help]"
    echo "Example: $SCRIPT -d erp-dev -c odoo06 -a enable -id janikvonrot@mint-system.ch"
    echo "options:"
    echo "  -c    Docker container. Defaults to 'odoo'."
    echo "  -d    Database name. Defaults to 'odoo'."
    echo "  -a    Action to perform. Options: enable, disable, list, reset"
    echo "  -i    User account login id."
    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: :a: :i: :v" opt; do
    case $opt in
        c) CONTAINER="$OPTARG";;
        d) DATABASE="$OPTARG";;
        a) ACTION="$OPTARG";;
        i) ID="$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'}

# Verify variables
[[ -z "$ACTION" ]] && { echo "Parameter -a|action is empty" ; exit 1; }

if [[ $ACTION == 'enable' ]]; then
    [[ -z "$ID" ]] && { echo "Parameter -i|id is empty" ; exit 1; }
    docker exec -it $CONTAINER bin/bash -c "psql postgresql://\$USER:\$PASSWORD@\$HOST/$DATABASE -c \"UPDATE res_users SET active=true WHERE login='$ID';\""
    echo "Enabled user $ID on Odoo database $DATABASE."
fi

if [[ $ACTION == 'disable' ]]; then
    [[ -z "$ID" ]] && { echo "Parameter -i|id is empty" ; exit 1; }
    docker exec -it $CONTAINER bin/bash -c "psql postgresql://\$USER:\$PASSWORD@\$HOST/$DATABASE -c \"UPDATE res_users SET active=false WHERE login='$ID';\""
    echo "Disabled user $ID on Odoo database $DATABASE."
fi

if [[ $ACTION == 'list' ]]; then
    docker exec -it $CONTAINER bin/bash -c "psql postgresql://\$USER:\$PASSWORD@\$HOST/$DATABASE -c 'SELECT id,login,active FROM res_users;'"
fi

if [[ $ACTION == 'reset' ]]; then
    [[ -z "$ID" ]] && { echo "Parameter -i|id is empty" ; exit 1; }
    docker exec -it $CONTAINER bin/bash -c "psql postgresql://\$USER:\$PASSWORD@\$HOST/$DATABASE -c \"UPDATE res_users SET active=true,password='\$pbkdf2-sha512\$25000\$JuScEwIg5JzTGqNUivFeqw\$yWTOcix2Afr3XGP2NPY7w4w49e9vpsu14NRndDYXAkbtMF4zkrmx6inVsoLl0zZY30xI/0GzhwonWsK9TUmjWA' WHERE id='$ID';\""
    echo "Reset password for user $ID on Odoo database $DATABASE."
fi