#!/bin/bash

set -euo pipefail

SERVICE_NAME=${SERVICE_NAME:-fpm}
APP_PATH=${APP_PATH:-/var/www/html/farmacia}
COMPOSE_DIR=${COMPOSE_DIR:-/var/www/farmacia}
COMPOSE_FILE=${COMPOSE_FILE:-$COMPOSE_DIR/docker-compose.yml}
RUN_USER=${RUN_USER:-www-data}

if command -v docker >/dev/null 2>&1; then
  if docker compose version >/dev/null 2>&1; then
    COMPOSE_CMD=(docker compose -f "$COMPOSE_FILE")
  elif command -v docker-compose >/dev/null 2>&1; then
    COMPOSE_CMD=(docker-compose -f "$COMPOSE_FILE")
  else
    echo "No se encontro docker compose ni docker-compose en el servidor."
    exit 1
  fi
else
  echo "Docker no esta instalado o no esta disponible en PATH."
  exit 1
fi

if [ ! -d "$APP_PATH" ]; then
  echo "No existe la ruta de aplicacion $APP_PATH"
  exit 1
fi

if [ ! -f "$COMPOSE_FILE" ]; then
  echo "No existe archivo compose en $COMPOSE_FILE"
  exit 1
fi

usage() {
  cat <<'EOF'
Uso:
  ./script-docker-app.sh artisan <comando...>
  ./script-docker-app.sh composer <comando...>
  ./script-docker-app.sh shell [comando...]
  ./script-docker-app.sh php -v

Ejemplos:
  ./script-docker-app.sh artisan optimize:clear
  ./script-docker-app.sh artisan queue:work database --sleep=3 --tries=3 --timeout=3600
  ./script-docker-app.sh composer install --no-dev --optimize-autoloader
  ./script-docker-app.sh shell
EOF
}

if [ $# -lt 1 ]; then
  usage
  exit 1
fi

ACTION=$1
shift

case "$ACTION" in
  artisan)
    exec "${COMPOSE_CMD[@]}" exec -T -u "$RUN_USER" "$SERVICE_NAME" php /var/www/html/artisan "$@"
    ;;
  composer)
    exec "${COMPOSE_CMD[@]}" exec -T -u "$RUN_USER" "$SERVICE_NAME" composer "$@"
    ;;
  php)
    exec "${COMPOSE_CMD[@]}" exec -T -u "$RUN_USER" "$SERVICE_NAME" php "$@"
    ;;
  shell)
    if [ $# -eq 0 ]; then
      exec "${COMPOSE_CMD[@]}" exec -u "$RUN_USER" "$SERVICE_NAME" sh
    fi
    exec "${COMPOSE_CMD[@]}" exec -T -u "$RUN_USER" "$SERVICE_NAME" sh -lc "$*"
    ;;
  *)
    usage
    exit 1
    ;;
esac
