#!/bin/bash

if [ -n "$ODOO_DATABASE" ]; then

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

    # Wait for database to be ready
    entrypoint-log "Waiting for database connection..."
    until psql "postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/postgres" -c '\q' 2>/dev/null; do
        entrypoint-log "Database not ready, waiting 2 seconds..."
        sleep 2
    done
    entrypoint-log "Database connection established"

    entrypoint-log "Check if database $ODOO_DATABASE exists..."
    DATABASE_EXISTS=$(exec psql "postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/postgres" -tAc "SELECT COUNT(*) FROM pg_database WHERE datname = '$ODOO_DATABASE'")
    entrypoint-log "Database exists check result: $DATABASE_EXISTS"

    # If it does not exist, create it
    if [ "$DATABASE_EXISTS" = "0" ]; then
        log-entrypoint "Create database $ODOO_DATABASE."
        (exec psql "postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/postgres" -tAc "CREATE DATABASE \"$ODOO_DATABASE\";") || true
        entrypoint-log "Database creation completed"
    else
        entrypoint-log "Database $ODOO_DATABASE already exists"
    fi

    log-entrypoint "Check if database $ODOO_DATABASE is initialized"
    DATABASE_INITIALIZED=$(exec psql "postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$ODOO_DATABASE" -tAc "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'ir_module_module'")
    entrypoint-log "Database initialization check result: $DATABASE_INITIALIZED"

    if [ "$DATABASE_INITIALIZED" = "0" ]; then
        entrypoint-log "Database not initialized, starting initialization process"
        ODOO_INIT_DEMO_DATA=${ODOO_INIT_DEMO_DATA:=False}
        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_WITH_DEMO=${ODOO_INIT_WITH_DEMO:="false"}

        ODOO_INIT_PARAM=""
        if [ "$ODOO_INIT_DEMO_DATA" = "False" ]; then
            ODOO_INIT_PARAM="--without-demo=all"
        fi

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

        if [ "$ODOO_INIT_LOGIN" != "admin" ] || [ "$ODOO_INIT_PASSWORD" != "admin" ]; then
            log-entrypoint "Updating admin user credentials to login: $ODOO_INIT_LOGIN"
            (exec odoo shell --database "$ODOO_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('Admin credentials updated successfully')
EOF
) || true
            entrypoint-log "Admin credentials update completed"
        fi
    else
        entrypoint-log "Database $ODOO_DATABASE is already initialized (DATABASE_INITIALIZED=$DATABASE_INITIALIZED)"
    fi

    # Recheck database initialization status
    entrypoint-log "Rechecking database initialization status..."
    DATABASE_INITIALIZED=$(exec psql "postgres://$PGUSER:$PGPASSWORD@$PGHOST:$PGPORT/$ODOO_DATABASE" -tAc "SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'ir_module_module'")
    entrypoint-log "Final database initialization status: $DATABASE_INITIALIZED"

    if [ "$DATABASE_INITIALIZED" = "1" ]; then
        entrypoint-log "Setting up mail server configuration..."
        export ODOO_MAIL_SMTP_PORT=${ODOO_MAIL_SMTP_PORT:="587"}
        export ODOO_MAIL_SMTP_ENCRYPTION=${ODOO_MAIL_SMTP_ENCRYPTION:="starttls"}
        export ODOO_MAIL_SMTP_FROM_FILTER=${ODOO_MAIL_SMTP_FROM_FILTER:=""}
        export ODOO_MAIL_IMAP_PORT=${ODOO_MAIL_IMAP_PORT:="993"}
        export ODOO_MAIL_IMAP_SSL=${ODOO_MAIL_IMAP_SSL:="True"}

        log-entrypoint "Setup mail server configuration for database $ODOO_DATABASE"
        (odoo shell "${DB_ARGS[@]}" --database "$ODOO_DATABASE" --config "$ODOO_RC" --stop-after-init --no-http < /usr/local/bin/setup-mail) || true
        entrypoint-log "Mail server configuration completed"
    else
        entrypoint-log "WARNING: Database initialization may have failed. DATABASE_INITIALIZED=$DATABASE_INITIALIZED"
    fi

    entrypoint-log "Database initialization process completed for $ODOO_DATABASE"
else
    entrypoint-log "ODOO_DATABASE environment variable not set, skipping database initialization"
fi
