#!/usr/bin/env bash
# Deploy morele-proxy to production (default: root@178.16.55.67:/opt/sinsay/morele-proxy)
set -euo pipefail

HOST="${DEPLOY_HOST:-178.16.55.67}"
USER="${DEPLOY_USER:-root}"
PASS="${DEPLOY_PASS:-}"
REMOTE_DIR="${DEPLOY_DIR:-/opt/sinsay/morele-proxy}"
MORELE_DOMAIN="${MORELE_DOMAIN:-morele.sinsaybuy.com}"
COMPOSE_FILES="-f docker-compose.prod.yml"

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"

if [[ -z "$PASS" ]]; then
  echo "Set DEPLOY_PASS or use SSH keys." >&2
  exit 1
fi

SSH=(sshpass -p "$PASS" ssh -o StrictHostKeyChecking=accept-new)
SCP=(sshpass -p "$PASS" scp -o StrictHostKeyChecking=accept-new)

echo "[deploy] Building tarball…"
tar --exclude='node_modules' --exclude='dist' --exclude='.env' --exclude='.DS_Store' \
  --exclude='test-results' -czf /tmp/morele-proxy-deploy.tgz -C "$ROOT" .

echo "[deploy] Uploading to ${USER}@${HOST}:${REMOTE_DIR}…"
"${SCP[@]}" /tmp/morele-proxy-deploy.tgz "${USER}@${HOST}:/root/morele-proxy-deploy.tgz"

REMOTE_SCRIPT=$(cat <<EOF
set -euo pipefail
mkdir -p "${REMOTE_DIR}"
cd "${REMOTE_DIR}"
if [ -d src ]; then rm -rf src.prev && cp -a src src.prev 2>/dev/null || true; fi
tar -xzf /root/morele-proxy-deploy.tgz -C "${REMOTE_DIR}"

if [ ! -f .env ]; then
  SECRET=\$(openssl rand -hex 32)
  PG_PASS=\$(openssl rand -hex 16)
  cat > .env <<ENVEOF
DOMAIN=${MORELE_DOMAIN}
ORIGIN=https://${MORELE_DOMAIN}
ACME_EMAIL=admin@sinsaybuy.com
PORT=3000

SESSION_SECRET=\${SECRET}

POSTGRES_USER=morele
POSTGRES_PASS=\${PG_PASS}
POSTGRES_DB=moreledb

PROXY_POOL_ENABLED=false
FLARESOLVERR_ENABLED=true
FLARESOLVERR_URL=http://flaresolverr:8191
FLARESOLVERR_MAX_TIMEOUT_MS=120000

MORELE_CART_API_PATH=/koszyk/
MORELE_USE_NATIVE_CHECKOUT=true
CHECKOUT_PAY_ENABLED=false
MORELE_ORDER_PATH=/dostawa-i-platnosc/
MORELE_THANK_YOU_PATH=/zamowienie/potwierdzenie/
MORELE_FALLBACK_CHECKOUT_PATH=/__mirror/checkout-fallback/
MORELE_SESSION_COOKIE=sid

NODE_ENV=production
ENVEOF
  echo "[deploy] Created new .env for ${MORELE_DOMAIN}"
else
  grep -q FLARESOLVERR_ENABLED .env || echo 'FLARESOLVERR_ENABLED=true' >> .env
  sed -i 's|^FLARESOLVERR_URL=.*|FLARESOLVERR_URL=http://flaresolverr:8191|' .env 2>/dev/null || true
  sed -i 's|^MORELE_ORDER_PATH=.*|MORELE_ORDER_PATH=/dostawa-i-platnosc/|' .env 2>/dev/null || true
  sed -i 's|^MORELE_FALLBACK_CHECKOUT_PATH=.*|MORELE_FALLBACK_CHECKOUT_PATH=/__mirror/checkout-fallback/|' .env 2>/dev/null || true
  echo "[deploy] Updated existing .env"
fi

docker compose ${COMPOSE_FILES} build app 2>&1 | tail -25
docker compose ${COMPOSE_FILES} up -d
sleep 8
docker compose ${COMPOSE_FILES} ps
docker compose ${COMPOSE_FILES} logs app --tail 20
EOF
)

"${SSH[@]}" "${USER}@${HOST}" "$REMOTE_SCRIPT"

echo "[deploy] Patching sinsay Caddy for ${MORELE_DOMAIN}…"
"${SSH[@]}" "${USER}@${HOST}" bash -s "$MORELE_DOMAIN" <<'PATCH'
set -euo pipefail
DOMAIN="$1"
CADDY=/opt/sinsay/Caddyfile
if grep -q "$DOMAIN" "$CADDY" 2>/dev/null; then
  echo "[deploy] Caddy already has $DOMAIN"
else
  cat >> "$CADDY" <<BLOCK

${DOMAIN} {
  encode gzip zstd
  request_body { max_size 50MB }
  reverse_proxy morele-app:3000 {
    header_up X-Forwarded-Proto {scheme}
    header_up X-Real-IP {remote_host}
    header_up X-Forwarded-For {remote_host}
    transport http {
      read_buffer 16384
      write_buffer 16384
      response_header_timeout 30s
      dial_timeout 10s
    }
  }
}
BLOCK
  echo "[deploy] Added $DOMAIN to Caddyfile"
fi
cd /opt/sinsay
docker compose up -d caddy
sleep 3
docker compose ps caddy
PATCH

echo "[deploy] Done. Open https://${MORELE_DOMAIN}/login/ (DNS A → ${HOST})"
