#!/bin/bash
# Sync GitHub repos from pingcap, tidbcloud, tikv organizations
# Usage: ./scripts/sync-github-repo-list.sh

set -e

PRIVATE_FILE="knowledge/meta/repos-private.json"
PUBLIC_FILE="knowledge/meta/repos-public.json"
FORKS_FILE="knowledge/meta/repos-forks.json"
TEMP_FILE=$(mktemp)

echo "Fetching repos from GitHub organizations..."

# Fetch repos from all three orgs
{
  gh api orgs/pingcap/repos --paginate
  gh api orgs/tidbcloud/repos --paginate
  gh api orgs/tikv/repos --paginate
} > "$TEMP_FILE"

# Create output directory
mkdir -p "$(dirname "$PRIVATE_FILE")"

# Extract non-fork repos to temp
jq -s 'flatten | unique_by(.full_name) | [.[] | select(.fork == false)] | sort_by(.owner.login, .name) | map({name: .name, full_name: .full_name, owner: .owner.login, description: .description, language: .language, stargazers_count: .stargazers_count, forks_count: .forks_count, visibility: .visibility, fork: .fork, archived: .archived, updated_at: .updated_at})' "$TEMP_FILE" > "$TEMP_FILE.nonfork"

# Extract private repos (non-fork only)
jq '[.[] | select(.visibility == "private")]' "$TEMP_FILE.nonfork" > "$PRIVATE_FILE"

# Extract public repos (non-fork only)
jq '[.[] | select(.visibility == "public")]' "$TEMP_FILE.nonfork" > "$PUBLIC_FILE"

# Extract fork repos
jq -s 'flatten | unique_by(.full_name) | [.[] | select(.fork == true)] | sort_by(.owner.login, .name) | map({name: .name, full_name: .full_name, owner: .owner.login, description: .description, language: .language, stargazers_count: .stargazers_count, forks_count: .forks_count, visibility: .visibility, fork: .fork, archived: .archived, updated_at: .updated_at})' "$TEMP_FILE" > "$FORKS_FILE"

rm "$TEMP_FILE" "$TEMP_FILE.nonfork"

# Stats
PRIVATE=$(jq length "$PRIVATE_FILE")
PUBLIC=$(jq length "$PUBLIC_FILE")
FORKS=$(jq length "$FORKS_FILE")
TOTAL=$((PRIVATE + PUBLIC))

echo ""
echo "✓ Saved $PRIVATE private repos to $PRIVATE_FILE"
echo "✓ Saved $PUBLIC public repos to $PUBLIC_FILE"
echo "✓ Saved $FORKS fork repos to $FORKS_FILE"
echo ""
echo "Statistics (non-fork):"
echo "  Private: $PRIVATE"
echo "  Public:  $PUBLIC"
echo ""
echo "By owner (private):"
jq -r '.[] | .owner' "$PRIVATE_FILE" | sort | uniq -c | sort -rn
