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

usage() {
  printf 'Usage: %s <local|rest|ssh|database>\n' "$0" >&2
}

if (($# != 1)); then
  usage
  exit 64
fi

local_variables=(
  LOCAL_SITE_URL
  WP_LOCAL_DB_NAME
  WP_LOCAL_DB_USER
  WP_LOCAL_DB_PASSWORD
  WP_LOCAL_DB_ROOT_PASSWORD
)

rest_variables=(
  SITE_URL
  WP_REST_USER
  WP_REST_APPLICATION_PASSWORD
)

ssh_variables=(
  WP_SSH_HOST
  WP_SSH_PORT
  WP_SSH_USER
  WP_SSH_KEY_PATH
  WP_SSH_KNOWN_HOSTS_PATH
  WP_REMOTE_PATH
)

database_variables=(
  WP_DB_HOST
  WP_DB_PORT
  WP_DB_NAME
  WP_DB_USER
  WP_DB_PASSWORD
  WP_DB_SSL_MODE
  WP_DB_SSL_CA
)

case "$1" in
  local)
    required_variables=("${local_variables[@]}")
    ;;
  rest)
    required_variables=("${rest_variables[@]}")
    ;;
  ssh)
    required_variables=("${ssh_variables[@]}")
    ;;
  database)
    required_variables=("${database_variables[@]}")
    ;;
  *)
    usage
    exit 64
    ;;
esac

missing_variable_count=0
for variable_name in "${required_variables[@]}"; do
  if [[ -z "${!variable_name:-}" ]]; then
    printf '%s is required.\n' "$variable_name" >&2
    missing_variable_count=$((missing_variable_count + 1))
  fi
done

if ((missing_variable_count > 0)); then
  exit 65
fi

printf '%s environment is valid.\n' "$1"
