#!/usr/bin/env bash
set -euo pipefail

# Coleta contexto local de Git/GitHub para ajudar a skill sprint-review-deck.
#
# Uso:
#   bash collect-git-context.sh --since "14 days ago" --output sprint-context.md
#
# O script é somente leitura: não altera branches, não faz commit e não faz push.

SINCE="14 days ago"
OUTPUT="sprint-context.md"
BASE_BRANCH=""
MAX_COMMITS="80"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --since)
      SINCE="$2"
      shift 2
      ;;
    --output)
      OUTPUT="$2"
      shift 2
      ;;
    --base)
      BASE_BRANCH="$2"
      shift 2
      ;;
    --max-commits)
      MAX_COMMITS="$2"
      shift 2
      ;;
    *)
      echo "Argumento desconhecido: $1"
      exit 1
      ;;
  esac
done

CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "sem-branch")"
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
REMOTE_URL="$(git config --get remote.origin.url || echo "sem-remote")"

{
  echo "# Contexto coletado da sprint"
  echo
  echo "> Gerado automaticamente. Revise antes de usar na apresentação."
  echo
  echo "## Identificação técnica"
  echo
  echo "- Data de coleta: $(date '+%Y-%m-%d %H:%M:%S')"
  echo "- Repositório: \`${REPO_ROOT}\`"
  echo "- Remote: \`${REMOTE_URL}\`"
  echo "- Branch atual: \`${CURRENT_BRANCH}\`"
  echo "- Período analisado: \`${SINCE}\`"
  echo

  echo "## Status local"
  echo
  echo '```txt'
  git status --short || true
  echo '```'
  echo

  echo "## Commits recentes"
  echo
  echo '```txt'
  git log --since="$SINCE" --pretty=format:'%h | %ad | %an | %s' --date=short -n "$MAX_COMMITS" || true
  echo
  echo '```'
  echo

  if [[ -n "$BASE_BRANCH" ]]; then
    echo "## Diff stat contra ${BASE_BRANCH}"
    echo
    echo '```txt'
    git diff --stat "$BASE_BRANCH"...HEAD || true
    echo '```'
    echo
  fi

  if command -v gh >/dev/null 2>&1; then
    echo "## PRs mergeados recentes via GitHub CLI"
    echo
    echo '```txt'
    gh pr list --state merged --limit 50 --json number,title,mergedAt,author,baseRefName,headRefName,url \
      --jq '.[] | "#\(.number) | \(.mergedAt) | \(.baseRefName) <- \(.headRefName) | \(.title) | \(.url)"' || true
    echo '```'
    echo

    echo "## PRs abertos relacionados"
    echo
    echo '```txt'
    gh pr list --state open --limit 50 --json number,title,author,baseRefName,headRefName,url \
      --jq '.[] | "#\(.number) | \(.baseRefName) <- \(.headRefName) | \(.title) | \(.url)"' || true
    echo '```'
    echo
  else
    echo "## GitHub CLI"
    echo
    echo "gh CLI não encontrado. Pulei coleta de PRs/issues."
    echo
  fi

  echo "## Espaço para contexto humano"
  echo
  echo "- Objetivo da sprint:"
  echo "- Entregas que devem aparecer:"
  echo "- Entregas que não devem aparecer:"
  echo "- Pendências/riscos:"
  echo "- Público da apresentação:"
  echo "- Tom desejado:"
  echo
} > "$OUTPUT"

echo "Contexto salvo em: $OUTPUT"
