#!/bin/bash

set -e

CUSTOM_ENV_FILE="/etc/docker/compose/custom.env"
PGXIVOCC_CONTAINER="xivocc-pgxivocc-1"

run_psql() {
    docker exec -i "${PGXIVOCC_CONTAINER}" psql -U postgres -v ON_ERROR_STOP=1 -qtA "$@"
}

is_mmuser_created() {
    [ "$(run_psql -c "SELECT 1 FROM pg_roles WHERE rolname = 'mmuser'")" = "1" ]
}

is_mattermost_db_created() {
    [ "$(run_psql -c "SELECT 1 FROM pg_database WHERE datname = 'mattermost'")" = "1" ]
}

get_mmuser_db_password() {
    grep -oP -m 1 '^\s*MMUSER_DB_PASSWORD\s*=\s*\K.*' "${CUSTOM_ENV_FILE}" || true
}

create_mmuser_db_password() {
    local password

    password=$(tr </dev/urandom -dc A-Za-z0-9 | head -c 64)
    if [ -n "$(tail -c 1 "${CUSTOM_ENV_FILE}")" ]; then
        echo >>"${CUSTOM_ENV_FILE}"
    fi
    echo "MMUSER_DB_PASSWORD=${password}" >>"${CUSTOM_ENV_FILE}"
    echo "${password}"
}

create_mmuser() {
    local password

    password=$(get_mmuser_db_password)
    if [ -z "${password}" ]; then
        password=$(create_mmuser_db_password)
        echo "MMUSER_DB_PASSWORD generated in ${CUSTOM_ENV_FILE}"
    fi
    run_psql -v mmuser_password="${password}" <<<"CREATE ROLE mmuser LOGIN PASSWORD :'mmuser_password';"
    echo "mmuser role created"
}

create_mattermost_db() {
    run_psql -c "CREATE DATABASE mattermost OWNER mmuser"
    echo "mattermost database created"
}

if is_mmuser_created; then
    echo "mmuser role already exists, its password is unchanged"
else
    create_mmuser
fi

if is_mattermost_db_created; then
    echo "mattermost database already exists"
else
    create_mattermost_db
fi
