#!/usr/bin/env bash
set -euo pipefail

if ! [[ -z ${ENABLE_DEBUG+undefined-guard} ]] ; then
  set -x
fi

HOST_PORT=${HOST_PORT:-"4010"}
MYSQL_USER=${MYSQL_USER:-"root"}
MYSQL_PWD=${MYSQL_PWD:-""}
DOCKER_MYSQL_CLIENT=${DOCKER_MYSQL_CLIENT:-""}

REMOTE_NAMESPACE=${REMOTE_NAMESPACE:-""}
DEFAULT_DB=
MYSQL_DOCKER=
MYSQL_DOCKER_HOST=

pushd "$(dirname "$0")/.." >/dev/null
service="$(basename "$PWD")"

if [[ -z ${REMOTE_NAMESPACE} ]] ; then
  DEFAULT_DB="$service"
  MYSQL_DOCKER_HOST=mysql
  MYSQL_DOCKER="docker run --rm -it --network dbaas_default"
  HOST_PORT=4000
else
  HOST_PORT="${HOST_PORT}" REMOTE_NAMESPACE=${REMOTE_NAMESPACE} ./scripts/mysql-port-forward "$@" &

  trap "kill %1" EXIT

  if [[ "$REMOTE_NAMESPACE" != operations ]] ; then
    MYSQL_USER="dbaas_root"
  fi

  if [[ -z $MYSQL_PWD ]] ; then
    service="db-tidb"
    if [[ "$REMOTE_NAMESPACE" == operations ]] ; then
      service="operations"
      if password=$(kubectl get secret -n operations dbaas-db-secret -o json  | jq -r '.data.password' | base64 --decode) ; then
        MYSQL_PWD="${password}"
      fi
    else
      if password=$(kubectl get secret -n operations -o json -l "cluster-namespace=${REMOTE_NAMESPACE}" | jq -r '.items[] | .data.dbaas' | base64 --decode) ; then
        MYSQL_PWD="${password}"
      fi
    fi
  fi

  if [[ ${REMOTE_NAMESPACE} == "$service" ]] ; then
    DEFAULT_DB="$service"
  else
    DEFAULT_DB=test
  fi

  # TODO: wait for port-forward to be ready"
  sleep 7

  MYSQL_DOCKER_HOST=127.0.0.1
  MYSQL_DOCKER="docker run --network host --rm -it"
fi

MYSQL_OPTS="-u ${MYSQL_USER} -P $HOST_PORT"

if command -v mysql >/dev/null && [[ -z $DOCKER_MYSQL_CLIENT ]] ; then
  MYSQL="env MYSQL_PWD=$MYSQL_PWD mysql ${MYSQL_OPTS} --host 127.0.0.1"
else
  MYSQL_ENV=""
  if ! [[ -z ${MYSQL_PWD} ]]; then
    MYSQL_ENV="-e MYSQL_PWD=${MYSQL_PWD}"
  fi

  MYSQL="$MYSQL_DOCKER -w $PWD -v $PWD:$PWD ${MYSQL_ENV} arey/mysql-client ${MYSQL_OPTS} --host $MYSQL_DOCKER_HOST"
fi

AUTO_SET_DB=
if [ $# -eq 0 ]; then
  $MYSQL "$DEFAULT_DB" || $MYSQL
else
  $MYSQL "$@"
fi
