#!/usr/bin/env bash
#
# Bootstrap установки prod-стека Unishift Platform.
#
# Ставит CLI `ush` (если его ещё нет) и делегирует установку:
#   ush platform install
#
# Запуск:
#   curl -fsSL https://storage.unishift.ru/services/prod/install.sh | bash
#   curl -fsSL …/install.sh | PUBLIC_HOST=203.0.113.10 bash
#   curl -fsSL …/install.sh | PUBLIC_HOST=app.example.com PUBLIC_SCHEME=https bash
#   curl -fsSL …/install.sh | INSTALL_DIR=/srv/unishift bash
#
# Дальнейшее управление — командами ush (bash-скрипты в каталог не кладутся):
#   ush platform update --public-host <IP>
#   ush platform migrate
#   ush platform ps
#
set -euo pipefail

CLI_INSTALL_URL="${CLI_INSTALL_URL:-https://storage.unishift.ru/cli/install.sh}"

log()  { printf '\033[1;34m==>\033[0m %s\n' "$*"; }
die()  { printf '\033[1;31mОшибка:\033[0m %s\n' "$*" >&2; exit 1; }

command -v curl >/dev/null 2>&1 || die "нужна утилита 'curl'"

if ! command -v ush >/dev/null 2>&1; then
  log "Ставлю CLI ush"
  curl -fsSL "$CLI_INSTALL_URL" | bash
fi

command -v ush >/dev/null 2>&1 || die "ush не найден в PATH после установки CLI"

args=(platform install)
[ -n "${INSTALL_DIR:-}" ] && args+=(--dir "$INSTALL_DIR")
[ -n "${BASE_URL:-}" ] && args+=(--base-url "$BASE_URL")
[ -n "${REGISTRY:-}" ] && args+=(--registry "$REGISTRY")
[ -n "${TAG:-}" ] && args+=(--tag "$TAG")
[ -n "${PUBLIC_HOST:-}" ] && args+=(--public-host "$PUBLIC_HOST")
[ -n "${PUBLIC_SCHEME:-}" ] && args+=(--public-scheme "$PUBLIC_SCHEME")
[ -n "${CLIENT_PORT:-}" ] && args+=(--client-port "$CLIENT_PORT")
[ -n "${CENTRIFUGO_PORT:-}" ] && args+=(--centrifugo-port "$CENTRIFUGO_PORT")
[ -n "${WEB_BASE_URL:-}" ] && args+=(--web-base-url "$WEB_BASE_URL")
[ -n "${CENTRIFUGO_WS_URL:-}" ] && args+=(--centrifugo-ws-url "$CENTRIFUGO_WS_URL")
[ -n "${CENTRIFUGO_ALLOWED_ORIGINS:-}" ] && args+=(--centrifugo-allowed-origins "$CENTRIFUGO_ALLOWED_ORIGINS")

log "ush ${args[*]}"
# curl | bash: не отдавать остаток скрипта в docker compose через stdin.
exec ush "${args[@]}" </dev/null
