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

# Required
: "${GITHUB_DEPLOY_TOKEN:?GITHUB_DEPLOY_TOKEN is required}"
: "${GITHUB_REPO_DIR:?GITHUB_REPO_DIR is required}"

# Build
: "${BUILD_ENV:=}"

# Testing
: "${SKIP_MAIN_DB:=false}"
: "${SKIP_TEST_DB:=false}"
: "${SQLITE_ENABLE:=false}"

# Github
: "${GITHUB_BRANCH:=master}"
: "${GITHUB_REPO:=database}"
: "${GITHUB_USER:=theorchard}"
: "${CHANGELOG_FILE:=db.changelog-master.xml}"

# Liquibase
: "${CONTEXTS:=qa,uat,prod,test}"

# Helpers
die()  { printf '[error] %s\n' "$*" >&2; exit 1; }

has_cmd() { command -v "$1" >/dev/null 2>&1; }

info() { printf '[info] %s\n' "$*"; }

try_cmd() { has_cmd "$1" || die "'$1' not found on PATH"; }

normalize_bool() {
  case "${1,,}" in
    1|true|t|yes|y)  echo "true" ;;
    0|false|f|no|n|"") echo "false" ;;
    *) die "Invalid boolean: '$1' (expected true/false/t/f/1/0/yes/no/y/n)";;
  esac
}

# Normalize
SKIP_MAIN_DB="$(normalize_bool "${SKIP_MAIN_DB}")"
SKIP_TEST_DB="$(normalize_bool "${SKIP_TEST_DB}")"
SQLITE_ENABLE="$(normalize_bool "${SQLITE_ENABLE}")"

# Build overrides
case "${BUILD_ENV:-}" in
  prod|qa|uat)
    CONTEXTS="${BUILD_ENV}"
    SKIP_MAIN_DB="false"
    SKIP_TEST_DB="true"
    SQLITE_ENABLE="false"
    ;;
esac
