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

# Usage: init-db [database]

database="$DB_NAME"
if [[ -n "$1" ]]; then
    database="$1"
fi

log-entrypoint "Starting database initialization for $database."
log-entrypoint "Database connection: $PGUSER@$PGHOST:$PGPORT"

log-entrypoint 'Waiting for database connection...'
until psql -d postgres -c '\q'; do
    log-entrypoint 'Database not ready, waiting 2 seconds...'
    sleep 2
done
log-entrypoint 'Database connection established.'

log-entrypoint "Check if database $database exists..."
database_exists=$(exec psql -d postgres -tAc "SELECT COUNT(*) FROM pg_database WHERE datname = '$database'")

# If it does not exist, create it
if [[ "$database_exists" = "0" ]]; then
    log-entrypoint "Create database $database..."
    (exec psql -d postgres -tAc "CREATE DATABASE \"$database\";") || true
    log-entrypoint 'Database creation completed.'
else
    log-entrypoint "Database $database already exists."
fi

if ! check-database-initialized "$database"; then
    log-entrypoint 'Database not initialized, starting initialization process'
    without_demo=${WITHOUT_DEMO:=True}
    odoo_init_login=${ODOO_INIT_LOGIN:="admin"}
    odoo_init_password=${ODOO_INIT_PASSWORD:="admin"}
    odoo_init_lang=${ODOO_INIT_LANG:="en_US"}
    odoo_init_addons=${ODOO_INIT_ADDONS:="web"}

    odoo_init_param=""
    if [[ "$without_demo" = "True" ]]; then
        odoo_init_param="--without-demo=all"
    fi

    log-entrypoint "Initialize database $database with modules: $odoo_init_addons."
    (exec odoo "${DB_ARGS[@]}" --database "$database" --init "$odoo_init_addons" --config "$ODOO_RC" --stop-after-init --no-http --load-language "$odoo_init_lang" $odoo_init_param) || true
    log-entrypoint 'Odoo initialization command completed.'

    if [[ "$odoo_init_login" != "admin" ]] || [[ "$odoo_init_password" != "admin" ]]; then
        log-entrypoint "Updating admin user credentials..."
        (exec odoo shell --database "$database" --config "$ODOO_RC" << EOF
admin_user = env['res.users'].browse(2)
admin_user.write({
'login': '$odoo_init_login',
'password': '$odoo_init_password'
})
env.cr.commit()
print('Credentials for user $odoo_init_login updated successfully.')
EOF
) || true
    fi
fi

if [[ -n "$ODOO_MAIL_SMTP_HOST" ]] || [[ -n "$ODOO_MAIL_IMAP_HOST" ]]; then
    if check-database-initialized "$database"; then
        log-entrypoint 'Setting up mail server configuration...'

        log-entrypoint "Setup mail server configuration for database $database."
        (odoo shell "${DB_ARGS[@]}" --database "$database" --config "$ODOO_RC" --stop-after-init --no-http < /usr/local/bin/setup-mail) || true
        log-entrypoint 'Mail server configuration completed.'
    else
        log-entrypoint 'Database not initialized, cannot setup mail server configuration.'
    fi
fi

log-entrypoint "Database initialization process completed for $database."