#!/usr/bin/env bash
# Runner de pruebas para proyecto legacy (Symfony 2.7 / PHP 7.1)
# Uso:
#   ./run-tests-legacy.sh                         # intenta local php 7.1
#   ./run-tests-legacy.sh --docker               # fuerza Docker php:7.1-cli
#   ./run-tests-legacy.sh --profile <cliente>    # aplica perfil de BD antes de correr
#   ./run-tests-legacy.sh src/MB/...Test.php     # ejecuta un test puntual

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$ROOT_DIR"

TEST_TARGET="src/MB/ProductoBundle/Tests/Controller"
FORCE_DOCKER="false"
PROFILE_NAME=""

while [[ $# -gt 0 ]]; do
  case "$1" in
    --docker)
      FORCE_DOCKER="true"
      shift
      ;;
    --profile)
      PROFILE_NAME="${2:-}"
      shift 2
      ;;
    *)
      TEST_TARGET="$1"
      shift
      ;;
  esac
done

if [[ -n "$PROFILE_NAME" ]]; then
  echo "[INFO] Validando conexion del perfil: $PROFILE_NAME"
  ./scripts/switch-db-profile.sh validate "$PROFILE_NAME"
  echo "[INFO] Aplicando perfil de BD: $PROFILE_NAME"
  ./scripts/switch-db-profile.sh apply "$PROFILE_NAME"
fi

run_local() {
  local php_cmd="$1"
  echo "[INFO] Ejecutando con local: $php_cmd"
  "$php_cmd" -v | head -1
  "$php_cmd" ./bin/phpunit "$TEST_TARGET"
}

run_docker() {
  echo "[INFO] Ejecutando con Docker php:7.1-cli"
  docker run --rm \
    -v "$ROOT_DIR":/app \
    -w /app \
    php:7.1-cli \
    bash -lc "php -v && php ./bin/phpunit '$TEST_TARGET'"
}

if [[ "$FORCE_DOCKER" == "true" ]]; then
  run_docker
  exit 0
fi

if command -v php7.1 >/dev/null 2>&1; then
  run_local php7.1
  exit 0
fi

if command -v php >/dev/null 2>&1; then
  PHP_VERSION="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')"
  if [[ "$PHP_VERSION" == "7.1" ]]; then
    run_local php
    exit 0
  fi
fi

echo "[WARN] No encontre PHP 7.1 local."
if command -v docker >/dev/null 2>&1; then
  echo "[INFO] Usando Docker como fallback..."
  run_docker
else
  echo "[ERROR] Necesitas PHP 7.1 local o Docker para correr pruebas legacy."
  echo "        Intenta: ./run-tests-legacy.sh --docker"
  exit 1
fi
