#!/bin/sh

# Database credentials can be provided via environment variables:
# - WP_CLI_TEST_DBHOST is the host to use and can include a port, i.e "127.0.0.1:33060" (defaults to "localhost")
# - WP_CLI_TEST_DBROOTUSER is the user that has permission to administer databases and users (defaults to "root").
# - WP_CLI_TEST_DBROOTPASS is the password to use for the above user (defaults to an empty password).
# - WP_CLI_TEST_DBUSER is the user that the tests run under (defaults to "wp_cli_test").
# - WP_CLI_TEST_DBPASS is the password to use for the above user (defaults to "password1").

HOST=localhost
PORT=""
HOST_STRING=''
if [ -n "$WP_CLI_TEST_DBHOST" ]; then
	case ${WP_CLI_TEST_DBHOST##*[]]} in
		(*:*) HOST=${WP_CLI_TEST_DBHOST%:*} PORT=${WP_CLI_TEST_DBHOST##*:};;
		(*)   HOST=$WP_CLI_TEST_DBHOST;;
	esac
  HOST_STRING="-h$HOST"
  if [ -n "$PORT" ]; then
  	HOST_STRING="$HOST_STRING -P$PORT --protocol=tcp"
	fi
fi

USER=root
if [ -n "$WP_CLI_TEST_DBROOTUSER" ]; then
  USER="$WP_CLI_TEST_DBROOTUSER"
fi

PASSWORD_STRING=""
if [ -n "$WP_CLI_TEST_DBROOTPASS" ]; then
  PASSWORD_STRING="-p$WP_CLI_TEST_DBROOTPASS"
fi

TEST_USER=wp_cli_test
if [ -n "$WP_CLI_TEST_DBUSER" ]; then
  TEST_USER="$WP_CLI_TEST_DBUSER"
fi

TEST_PASSWORD=password1
if [ -n "$WP_CLI_TEST_DBPASS" ]; then
  TEST_PASSWORD="$WP_CLI_TEST_DBPASS"
fi

# Prepare the database for running the tests with a MySQL version 8.0 or higher.
install_db_8_0_plus() {
	mysql -e "CREATE DATABASE IF NOT EXISTS \`wp_cli_test\`;" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
	mysql -e "CREATE USER IF NOT EXISTS \`wp_cli_test\`@'%' IDENTIFIED WITH mysql_native_password BY '$TEST_PASSWORD'" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
	mysql -e "GRANT ALL PRIVILEGES ON \`wp_cli_test\`.* TO '$TEST_USER'@'%'" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
	mysql -e "GRANT ALL PRIVILEGES ON \`wp_cli_test_scaffold\`.* TO '$TEST_USER'@'%'" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
}

# Prepare the database for running the tests with a MySQL version lower than 8.0.
install_db_lower_than_8_0() {
	mysql -e "CREATE DATABASE IF NOT EXISTS \`wp_cli_test\`;" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
	mysql -e "GRANT ALL ON \`wp_cli_test\`.* TO '$TEST_USER'@'%' IDENTIFIED BY '$TEST_PASSWORD'" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
	mysql -e "GRANT ALL ON \`wp_cli_test_scaffold\`.* TO '$TEST_USER'@'%' IDENTIFIED BY '$TEST_PASSWORD'" $HOST_STRING -u"$USER" "$PASSWORD_STRING"
}

set -ex

VERSION_STRING=$(mysql -e "SELECT VERSION()" --skip-column-names $HOST_STRING -u"$USER" "$PASSWORD_STRING")
VERSION=$(echo "$VERSION_STRING" | grep -o '^[^-]*')
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)

if [ "$MAJOR" -ge 8 ]; then
	install_db_8_0_plus
else
	install_db_lower_than_8_0
fi
