#!/bin/bash
#
# pull-astro-docs.sh
# Pulls latest Astro English documentation → combined markdown for Claude Projects
#
# Usage: ./pull-astro-docs.sh [output_dir]
#        Default: ./astro-docs-output
#
# Requirements: git
#

set -e

OUTPUT_DIR="${1:-./astro-docs-output}"
REPO_URL="https://github.com/withastro/docs.git"
TEMP_DIR=$(mktemp -d)
DOCS_PATH="src/content/docs/en"
DATE=$(date +%Y-%m-%d)

cleanup() { rm -rf "$TEMP_DIR"; }
trap cleanup EXIT

echo "=== Astro Docs Puller ==="
echo "Output: $OUTPUT_DIR"
echo ""

mkdir -p "$OUTPUT_DIR"

# Sparse checkout - only pulls English docs
echo "Cloning (sparse checkout - English docs only)..."
git clone --depth 1 --filter=blob:none --sparse "$REPO_URL" "$TEMP_DIR/docs" 2>&1 | grep -v "^remote:" || true
cd "$TEMP_DIR/docs"
git sparse-checkout set "$DOCS_PATH" 2>/dev/null
COMMIT_SHA=$(git rev-parse --short HEAD)
cd - > /dev/null

DOCS_DIR="$TEMP_DIR/docs/$DOCS_PATH"
[ ! -d "$DOCS_DIR" ] && echo "ERROR: Docs not found" && exit 1

echo "Found docs (commit: $COMMIT_SHA)"

OUTPUT_FILE="$OUTPUT_DIR/astro-docs-combined.md"

# Header
cat > "$OUTPUT_FILE" << EOF
# Astro Documentation (English)

- **Source:** https://github.com/withastro/docs
- **Commit:** $COMMIT_SHA
- **Pulled:** $DATE
- **Live:** https://docs.astro.build/en/getting-started/

---
EOF

# Process all MDX/MD files
FILE_COUNT=$(find "$DOCS_DIR" -type f \( -name "*.mdx" -o -name "*.md" \) | wc -l)
echo "Processing $FILE_COUNT files..."

find "$DOCS_DIR" -type f \( -name "*.mdx" -o -name "*.md" \) | sort | while read -r file; do
    REL_PATH="${file#$DOCS_DIR/}"
    REL_PATH="${REL_PATH%.mdx}"  # strip .mdx extension
    REL_PATH="${REL_PATH%.md}"   # strip .md extension
    
    {
        echo ""
        echo "---"
        echo ""
        echo "## 📄 $REL_PATH"
        echo ""
        cat "$file"
        echo ""
    } >> "$OUTPUT_FILE"
done

SIZE_KB=$(du -k "$OUTPUT_FILE" | cut -f1)
SIZE_H=$(du -h "$OUTPUT_FILE" | cut -f1)

echo ""
echo "=== Complete ==="
echo "File: $OUTPUT_FILE"
echo "Size: $SIZE_H"

# Create split files if large
if [ "$SIZE_KB" -gt 3000 ]; then
    echo ""
    echo "Creating split files by section..."
    
    SPLIT_DIR="$OUTPUT_DIR/split"
    mkdir -p "$SPLIT_DIR"
    
    # Top-level directories become separate files
    for section_dir in "$DOCS_DIR"/*/; do
        [ ! -d "$section_dir" ] && continue
        SECTION=$(basename "$section_dir")
        SECTION_FILE="$SPLIT_DIR/astro-${SECTION}.md"
        
        echo "# Astro Docs: $SECTION" > "$SECTION_FILE"
        echo "" >> "$SECTION_FILE"
        echo "Commit: $COMMIT_SHA | Pulled: $DATE" >> "$SECTION_FILE"
        echo "" >> "$SECTION_FILE"
        echo "---" >> "$SECTION_FILE"
        
        find "$section_dir" -type f \( -name "*.mdx" -o -name "*.md" \) | sort | while read -r file; do
            REL="${file#$DOCS_DIR/}"
            REL="${REL%.mdx}"
            REL="${REL%.md}"
            {
                echo ""
                echo "---"
                echo ""
                echo "## 📄 $REL"
                echo ""
                cat "$file"
                echo ""
            } >> "$SECTION_FILE"
        done
        
        echo "  → astro-${SECTION}.md ($(du -h "$SECTION_FILE" | cut -f1))"
    done
    
    # Root-level files
    ROOT_COUNT=$(find "$DOCS_DIR" -maxdepth 1 -type f \( -name "*.mdx" -o -name "*.md" \) | wc -l)
    if [ "$ROOT_COUNT" -gt 0 ]; then
        ROOT_FILE="$SPLIT_DIR/astro-root.md"
        echo "# Astro Docs: Root" > "$ROOT_FILE"
        echo "" >> "$ROOT_FILE"
        echo "Commit: $COMMIT_SHA | Pulled: $DATE" >> "$ROOT_FILE"
        echo "---" >> "$ROOT_FILE"
        
        find "$DOCS_DIR" -maxdepth 1 -type f \( -name "*.mdx" -o -name "*.md" \) | sort | while read -r file; do
            REL=$(basename "${file%.mdx}")
            REL="${REL%.md}"
            {
                echo ""
                echo "## 📄 $REL"
                echo ""
                cat "$file"
                echo ""
            } >> "$ROOT_FILE"
        done
        echo "  → astro-root.md ($(du -h "$ROOT_FILE" | cut -f1))"
    fi
    
    echo ""
    echo "Split files in: $SPLIT_DIR/"
fi

echo ""
echo "✅ Upload to Claude Project Files!"
