#!/bin/bash
# pip_info v2.0 — Luis GuLo Edition

mostrar_ayuda() {
  echo "═══════════════════════════════════════════════════════════════════════"
  echo "Uso: $0 <paquete> [--all] [--json]"
  echo ""
  echo "Opciones:"
  echo "  --all     Mostrar TODAS las versiones (incluye pre-release)"
  echo "  --json    Salida en JSON puro"
  echo ""
  echo "Por defecto muestra las 10 últimas versiones estables."
  echo "═══════════════════════════════════════════════════════════════════════"
}

# ----------------------
# Validación de argumentos
# ----------------------
if [[ "$1" == "--help" || "$1" == "-h" ]]; then
  mostrar_ayuda
  exit 0
fi

if [ -z "$1" ]; then
  echo "❌ Error: Debe indicar el nombre del paquete."
  mostrar_ayuda
  exit 1
fi

PAQUETE="$1"
FLAG_ALL="$2"
FLAG_JSON="$3"

URL="https://pypi.org/pypi/$PAQUETE/json"
RESPUESTA=$(curl -s "$URL")

# ----------------------
# Validación del JSON
# ----------------------
if ! echo "$RESPUESTA" | jq empty 2>/dev/null; then
  echo "❌ PyPI devolvió una respuesta no válida (¿paquete inexistente?)."
  exit 1
fi

if ! echo "$RESPUESTA" | jq -e '.info.name' >/dev/null; then
  echo "❌ No se encontró información para '$PAQUETE'"
  exit 1
fi

# Salida JSON pura
if [[ "$FLAG_ALL" == "--json" || "$FLAG_JSON" == "--json" ]]; then
  echo "$RESPUESTA"
  exit 0
fi

# ----------------------
# Obtener campos principales
# ----------------------
NOMBRE=$(echo "$RESPUESTA" | jq -r '.info.name')
VERSION=$(echo "$RESPUESTA" | jq -r '.info.version')
DESCRIPCION=$(echo "$RESPUESTA" | jq -r '.info.summary')

echo "📦 Paquete: $NOMBRE"
echo "🔢 Última versión: $VERSION"
echo "📝 Descripción: $DESCRIPCION"
echo

# ----------------------
# Funciones para listar versiones
# ----------------------

mostrar_estables() {
  echo "📚 Últimas 10 versiones ESTABLES:"
  echo

  echo "$RESPUESTA" \
    | jq -r '.releases | keys[]' \
    | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \
    | sort -V -r \
    | head -n 10 \
    | while read v; do
        PY=$(echo "$RESPUESTA" | jq -r ".releases[\"$v\"][0].requires_python // \"N/A\"")
        printf "  %-15s  (Python %s)\n" "$v" "$PY"
      done
}

mostrar_todas() {
  echo "📚 Todas las versiones:"
  echo

  echo "$RESPUESTA" \
    | jq -r '.releases | keys[]' \
    | sort -V -r \
    | while read v; do
        PY=$(echo "$RESPUESTA" | jq -r ".releases[\"$v\"][0].requires_python // \"N/A\"")
        printf "  %-15s  (Python %s)\n" "$v" "$PY"
      done
}

# ----------------------
# Selección del modo
# ----------------------
if [[ "$FLAG_ALL" == "--all" ]]; then
  mostrar_todas
else
  mostrar_estables
fi
