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

TAG=${1:-latest}

# ubicacion del proyecto
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"

# carga si el env existe (si existe estamos desde local)
ENV_FILE="$PROJECT_ROOT/.env.production"

# cargar las variables desde el env
if [ -f "$ENV_FILE" ]; then
  echo "📄 Cargando variables desde .env"
  set -a
  source "$ENV_FILE"
  set +a
else
  echo "ℹ️ No hay .env, usando variables del entorno"
fi

# validacion de variables
: "${SSH_USER:?SSH_USER no definido}"
: "${SSH_HOST:?SSH_HOST no definido}"
: "${SSH_KEY_PATH:?SSH_KEY_PATH no definido}"
: "${REGISTRY:?REGISTRY no definido}"
: "${REGISTRY_USERNAME:?REGISTRY_USERNAME no definido}"
: "${REGISTRY_PASSWORD:?REGISTRY_PASSWORD no definido}"
: "${IMAGE_NAME:?IMAGE_NAME no definido}"



echo "📡 Destino: ${SSH_USER}@${SSH_HOST}"
echo "🚀 Deploying tag: ${TAG}"

# copiamos el docker compose de produccion a la vm
scp -i "${SSH_KEY_PATH}" \
  "$PROJECT_ROOT/docker-compose.yaml" \
  "${SSH_USER}@${SSH_HOST}:/home/${SSH_USER}/docker-compose.yaml"

# deploy dentro de la vm
ssh -i "${SSH_KEY_PATH}" "${SSH_USER}@${SSH_HOST}" << EOF

  echo "🔐 Login Registry"
  echo "${REGISTRY_PASSWORD}" | docker login "${REGISTRY}" \
    -u "${REGISTRY_USERNAME}" --password-stdin

  echo "📥 Pull imagen"
  docker pull "${REGISTRY}/${IMAGE_NAME}:${TAG}"

  IMAGE_TO_USE="${REGISTRY}/${IMAGE_NAME}:${TAG}"
  echo "🐳 Levantando servicios"
  docker compose pull
  docker compose down
  docker compose up -d

docker logout
EOF

echo "✅ Deploy finalizado"

