#!/bin/sh

# set the postgres database host, port, user and password according to the environment
# and pass them as arguments to the odoo process if not present in the config file
: ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}}
: ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}
: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}
: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}

check_config() {
    param="$1"
    value="$2"
    if ! grep -q -E "^\s*\b${param}\b\s*=" /opt/odoo/etc/odoo.conf ; then
        DB_ARGS="${DB_ARGS} --${param} ${value}"
    fi;
}

unaccent_db() {
    /usr/bin/python3 -c "import psycopg2

try:
    conn = psycopg2.connect(database='postgres', user='${USER}', password='${PASSWORD}', host='${HOST}', port='${PORT}')
except:
    print('err: init: fail to connect to database')
    exit(11)

cur = conn.cursor()
try:
    cur.execute(\"SELECT datname FROM pg_database WHERE datname='${PGDATABASE}'\")
except:
    print('err: init: fail to execute request')
    cur.close()
    conn.close()
    exit(12)

if not cur.fetchall():
    cur.close()
    conn.close()
    exit(1)

try:
    cur.execute('CREATE EXTENSION IF NOT EXISTS unaccent')
except:
    print('err: init: fail to execute request')
    cur.close()
    conn.close()
    exit(13)

conn.commit()
cur.close()
conn.close()
exit(0)"

    return $?
}

DB_ARGS=''
check_config "db_host" "$HOST"
check_config "db_port" "$PORT"
check_config "db_user" "$USER"
check_config "db_password" "$PASSWORD"

unaccent_db
return_code=$?
[ "$return_code" -gt 10 ] && exit 1
if [ "$return_code" == 1 ]; then
  	echo "info: init: database $PGDATABASE does not exist"
  	DB_ARGS="${DB_ARGS} --load-language fr_FR"
fi

case "$1" in
    -- | odoo)
        shift
        if [[ "$1" == "scaffold" ]] ; then
            exec /opt/odoo/odoo/odoo-bin -c /opt/odoo/etc/odoo.conf "$@"
        else
            exec /opt/odoo/odoo/odoo-bin -c /opt/odoo/etc/odoo.conf "$@" ${DB_ARGS}
        fi
        ;;
    -*)
        exec /opt/odoo/odoo/odoo-bin -c /opt/odoo/etc/odoo.conf "$@" ${DB_ARGS}
        ;;
    *)
        exec "$@"
esac

exit 1