#!/usr/bin/env bash
# Deploy one of the built targets.
#
#   ./run.sh deploy web [env]
#   ./run.sh deploy mobile [env]
#   ./run.sh deploy desktop [env]
#
# The command comes from DEPLOY_<TARGET>_CMD in run/.env, or from the preset
# DEPLOY_<TARGET>_TARGET selects (see scripts/common.sh). It runs inside the
# frontend container, at the monorepo root, with DEPLOY_ENV exported.
source "$(dirname "${BASH_SOURCE[0]}")/common.sh"

TARGET="${1:-}"
DEPLOY_ENV="${2:-${DEPLOY_DEFAULT_ENV:-staging}}"

usage() {
  cat <<USAGE
Usage: ./run.sh deploy <web|mobile|desktop> [env]

Configured targets:
  web      ${DEPLOY_WEB_TARGET:-none}
  mobile   ${DEPLOY_MOBILE_TARGET:-none}
  desktop  ${DEPLOY_DESKTOP_TARGET:-none}

Environments: ${DEPLOY_ENVS:-staging production} (default ${DEPLOY_DEFAULT_ENV:-staging})
Set the target in run/.env, or run ./run.sh init to pick one.
USAGE
}

case "${TARGET}" in
  web)     COMMAND="${DEPLOY_WEB_CMD:-}";     SERVICE="web" ;;
  mobile)  COMMAND="${DEPLOY_MOBILE_CMD:-}";  SERVICE="mobile-client" ;;
  desktop) COMMAND="${DEPLOY_DESKTOP_CMD:-}"; SERVICE="desktop" ;;
  ""|-h|--help) usage; [ -z "${TARGET}" ] && exit 1 || exit 0 ;;
  *) echo "unknown deploy target: ${TARGET}" >&2; echo; usage; exit 1 ;;
esac

if [ -z "${COMMAND}" ]; then
  echo "error: no deploy command for '${TARGET}'" >&2
  echo "       set DEPLOY_$(echo "${TARGET}" | tr '[:lower:]' '[:upper:]')_TARGET (or _CMD) in run/.env" >&2
  exit 1
fi

require_docker
ensure_env
check_layout

echo "[deploy] ${TARGET} → ${DEPLOY_ENV}"
echo "[deploy] ${COMMAND}"
echo

# Deploys need the workspace and its node_modules, so they run in a throwaway
# container built from the frontend image rather than in the dev server itself.
exec dc run --rm --no-deps \
  -e DEPLOY_ENV="${DEPLOY_ENV}" \
  -e DEPLOY_TARGET="${TARGET}" \
  -e DEPLOY_WEB_IMAGE="${DEPLOY_WEB_IMAGE:-}" \
  -e DEPLOY_WEB_SSH_DEST="${DEPLOY_WEB_SSH_DEST:-}" \
  -e DEPLOY_MOBILE_PLATFORM="${DEPLOY_MOBILE_PLATFORM:-all}" \
  -e DEPLOY_DESKTOP_OUT="${DEPLOY_DESKTOP_OUT:-dist}" \
  --entrypoint bash \
  "${SERVICE}" -lc "${COMMAND}"
