#!/usr/bin/env bash
# =============================================================================
# Completa la copia de GitHub con lo que la primera pasada no capturó:
# despliegues y su historial de estados, entornos, reglas de protección de
# ramas, artefactos de integración continua y la lista real de secretos.
#
# Uso: GH_TOKEN=... ./completar-github.sh <destino> [owner/repo]
# =============================================================================
set -uo pipefail

DEST="${1:?falta el directorio de destino}"
REPO="${2:-itproviders-netizen/kynda-poc}"
M="$DEST/metadatos"
mkdir -p "$M/despliegues"

# Une la salida paginada de gh en un único array JSON
unir() {
  python3 -c "
import json,sys
t=sys.stdin.read().strip()
objs=[]
if t:
    for chunk in t.replace('][', ']\n[').split('\n'):
        try:
            d=json.loads(chunk)
            objs.extend(d if isinstance(d,list) else [d])
        except Exception: pass
json.dump(objs, open('$1','w'), indent=2)
print(len(objs))
"
}
linea() { printf "  %-34s %s\n" "$1" "$2"; }

echo "--- Despliegues ---"
N=$(gh api "repos/$REPO/deployments" --paginate 2>/dev/null | unir "$M/despliegues.json")
linea "despliegues" "$N"

# Estado de cada despliegue: es donde consta si terminó bien y a qué entorno fue
IDS=$(python3 -c "
import json
try: print(' '.join(str(d['id']) for d in json.load(open('$M/despliegues.json'))))
except Exception: pass
")
C=0
for id in $IDS; do
  gh api "repos/$REPO/deployments/$id/statuses" --paginate > "$M/despliegues/$id.json" 2>/dev/null && C=$((C+1))
done
linea "historiales de estado" "$C"

echo "--- Configuración del repositorio ---"
gh api "repos/$REPO/environments" > "$M/entornos.json" 2>/dev/null \
  && linea "entornos" "$(python3 -c "import json;print(json.load(open('$M/entornos.json')).get('total_count',0))" 2>/dev/null)" \
  || linea "entornos" "sin acceso"

gh api "repos/$REPO/rulesets" --paginate 2>/dev/null | unir "$M/reglas-rama.json" | xargs -I{} echo "  reglas de rama                     {}"

# Detalle de cada regla, que es donde está la configuración real
RIDS=$(python3 -c "
import json
try: print(' '.join(str(r['id']) for r in json.load(open('$M/reglas-rama.json'))))
except Exception: pass
")
for rid in $RIDS; do
  gh api "repos/$REPO/rulesets/$rid" > "$M/regla-$rid.json" 2>/dev/null
done

echo "--- Integración continua ---"
gh api "repos/$REPO/actions/artifacts" --jq '.artifacts' 2>/dev/null > "$M/ci/artefactos.json" \
  && linea "artefactos" "$(python3 -c "import json;print(len(json.load(open('$M/ci/artefactos.json'))))" 2>/dev/null || echo 0)"

echo "--- Secretos y variables (solo nombres; los valores no son recuperables) ---"
gh api "repos/$REPO/actions/secrets" --jq '.secrets' 2>/dev/null > "$M/secretos.json" \
  && linea "secretos" "$(python3 -c "import json;print(len(json.load(open('$M/secretos.json'))))" 2>/dev/null || echo 0)"
gh api "repos/$REPO/actions/variables" --jq '.variables' 2>/dev/null > "$M/variables.json"

echo "--- Otros ---"
gh api "repos/$REPO/comments" --paginate 2>/dev/null | unir "$M/comentarios-commit.json" | xargs -I{} echo "  comentarios sobre commits          {}"
gh api "repos/$REPO/forks" --paginate 2>/dev/null | unir "$M/forks.json" | xargs -I{} echo "  forks                              {}"

echo "Complemento terminado."
