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

if [ "$EUID" -ne 0 ]; then
    echo "Error: This script must be run as root" >&2
    exit 1
fi
set -x

# What user should we use for connecting to the database
POSTGRES_USER="${POSTGRES_USER:-postgres}"

# This psql command may fail because the zulip database doesn’t exist,
# hence the &&.
if records="$(
    cd /  # Make sure the current working directory is readable by postgres
    su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -Atc 'SELECT COUNT(*) FROM zulip.zerver_message;' zulip"
)" && [ "$records" -gt 200 ]; then
    set +x
    echo "WARNING: This will delete your Zulip database which currently contains $records messages."
    read -p "Do you want to proceed? [y/N] " -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]
    then
        exit 1
    fi
    set -x
fi

# Shut down all services to ensure a quiescent state.
if [ -e "/var/run/supervisor.sock" ]; then
    supervisorctl stop all
fi

# Drop any open connections to any old database.
"$(dirname "$0")/terminate-psql-sessions" postgres zulip zulip_base

(
    cd /  # Make sure the current working directory is readable by postgres
    su "$POSTGRES_USER" -c 'psql -v ON_ERROR_STOP=1 -e'
) < "$(dirname "$0")/create-db.sql"

# Clear memcached to avoid contamination from previous database state
"$(dirname "$0")/flush-memcached"

echo "Database created"
