#!/bin/bash

#
# Utility functions for database gears
#

[ ! -z "$LI_CONTROLLER_LIB_DB" ] && return 0
LI_CONTROLLER_LIB_DB=true

#
# Skeleton functions, override for specific cartridges
#
function wait_to_start_db {
    warning "Cartridge does not override wait_to_start_db."
    sleep 10
}

function wait_to_start_db_as_user {
    warning "Cartridge does not override wait_to_start_db_as_user."
    sleep 10
}

#
# Work functions, less common to override
#
function _set_db_env {
    # Database environment may not be fully formed when this file is
    # sourced.  Further, functions may be called only when their own
    # requirements are satisfied and variables may change so source
    # this at the top of each function.
    CART_NS=$(convert_cart_name_to_namespace_id $cartridge_type)
    
    _ctl_script="${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh"
    _ctl_ongear_script="${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh"
    _db_gear_uuid=$(get_env_var_dynamic "OPENSHIFT_${CART_NS}_DB_GEAR_UUID")
    _db_gear_dns=$(get_env_var_dynamic "OPENSHIFT_${CART_NS}_DB_GEAR_DNS")
    _db_host=$(get_env_var_dynamic "OPENSHIFT_${CART_NS}_DB_HOST")
}

function start_db {
    _set_db_env
    super_run_as_user "$_ctl_script start"
    wait_to_start_db
}

function start_database {
    super_run_as_user "${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh start"
    wait_to_start_db
}

function stop_db {
    _set_db_env
    super_run_as_user "$_ctl_script stop"
}

function stop_database {
    super_run_as_user "${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh stop"
}

function restart_db {
    _set_db_env
    super_run_as_user "$_ctl_script restart"
}

function restart_database {
    super_run_as_user "${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh restart"
}

function is_db_on_dbgear {
    _set_db_env
    [[ -n "$_db_gear_uuid"  && \
        -n "$_db_gear_dns" && \
        "$OPENSHIFT_APP_UUID" != "$_db_gear_uuid" ]]
}

function ssh_dbgear {
    _set_db_env
   gear_user_and_host="$_db_gear_uuid@$_db_gear_dns"
   ssh $gear_user_and_host "$@"
}

function control_db_on_dbgear {
    _set_db_env
    ssh_dbgear $_ctl_ongear_script $1
}

function start_db_as_user {
    _set_db_env
    if is_db_on_dbgear; then
        control_db_on_dbgear start
        return 0
    fi

    ${_ctl_script} start
    wait_to_start_db
}

function start_database_as_user {
    _set_db_env
    if is_db_on_dbgear; then
        control_db_on_dbgear start
        return 0
    fi

    ${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh start
    wait_to_start_db_as_user
}

function stop_db_as_user {
    _set_db_env
    if is_db_on_dbgear; then
        control_db_on_dbgear stop
        sleep 1
        return 0
    fi

    ${_ctl_script} stop
    sleep 1
}

function stop_database_as_user {
    _set_db_env
    if is_db_on_dbgear; then
        control_db_on_dbgear stop
        sleep 1
        return 0
    fi
    ${CARTRIDGE_BASE_PATH}/$cartridge_type/info/bin/app_ctl.sh stop
    sleep 1
}

function get_db_host_as_user {
    _set_db_env
    if is_db_on_dbgear; then
        ssh_dbgear "cartridge_type=$cartridge_type; source /etc/openshift/node.conf; source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/util; source ${CARTRIDGE_BASE_PATH}/abstract/info/lib/db; _set_db_env; echo \$_db_host" 2> /dev/null
        return 0
    fi

    echo $_db_host
}
