#!/bin/bash

source "$(dirname $0)/../dokku_common"

DB_ROOT="$DOKKU_ROOT/.mariadb"
DB_IMAGE="ayufan/dokku-alt-mariadb"
DB_VOLUME="$DB_ROOT/mysql"
DB_ADMIN_PASSWORD="$DB_ROOT/mysql_password"
DB_CONTAINER="mariadb_single_container"
DB_CONTAINER_LINK="mariadb"
DB_CONTAINER_VOLUME="/opt/mysql"
DB_CONTAINER_PASSWORD="/opt/mysql_password"
DB_PORT=3306
DB_HOST="$DB_CONTAINER_LINK"

DB_APP_PASSWORDS="$DB_ROOT/pwd_app_"
DB_APP_DATABASES="$DB_ROOT/dbs_app_"

function start_database_container() {
    if docker inspect "$DB_CONTAINER" >/dev/null 2>/dev/null; then
        return
    fi

    docker run --detach "--publish=$DB_PORT" \
               --volume="$DB_VOLUME":"$DB_CONTAINER_VOLUME" \
               --volume="$DB_ADMIN_PASSWORD":"$DB_CONTAINER_PASSWORD" \
               --name="$DB_CONTAINER" \
               "$DB_IMAGE" \
               /usr/bin/start_mariadb.sh >/dev/null
    for i in $(seq 1 30); do
        echo "Waiting for $DB_HOST to boot ($i)..."
        if [[ -f "$DB_VOLUME/initialized" ]]; then
            break
        fi
        sleep 5s
    done
    sleep 5s
}

function restart_database_container() {
    stop_and_remove_container "$DB_CONTAINER"
    start_database_container
}

function ensure_database_container_is_running() {
    remove_container "$DB_CONTAINER"
    start_database_container
}

function db_info() {
    APP="$1"
    DB_NAME="$2"
    DB_PASSWORD="$DB_APP_PASSWORDS$APP"
    DB_LINK="$DB_APP_DATABASES$APP/$DB_NAME"
    DB_PASSWORD="$(cat "$DB_PASSWORD" 2>/dev/null)"
    DB_USER="$APP"
    DB_DATABASE="$DB_NAME"
    DB_URL="mysql2://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_DATABASE"
    [[ ! -f "$DB_LINK" ]] && return 1
    return 0
}
