#!/bin/bash

# Script to generate PNG images from PlantUML diagrams in plantuml.md
# Usage: ./generate_plantuml_images.sh

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLANTUML_FILE="$SCRIPT_DIR/plantuml.md"
OUTPUT_DIR="$SCRIPT_DIR/images/plantuml"
TEMP_DIR="$SCRIPT_DIR/.temp_plantuml"

# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${BLUE}🎨 PlantUML Image Generator${NC}"
echo "================================"

# Check if plantuml.md exists
if [ ! -f "$PLANTUML_FILE" ]; then
    echo -e "${YELLOW}Error: plantuml.md not found${NC}"
    exit 1
fi

# Create output directory
mkdir -p "$OUTPUT_DIR"
mkdir -p "$TEMP_DIR"

echo -e "${GREEN}✓${NC} Output directory: $OUTPUT_DIR"

# Extract PlantUML diagrams from markdown
echo -e "\n${BLUE}Extracting diagrams...${NC}"

# Use awk to extract code blocks
awk '
/^```plantuml$/ { in_block=1; block_num++; next }
/^```$/ && in_block { in_block=0; next }
in_block {
    file = sprintf("'"$TEMP_DIR"'/diagram_%02d.puml", block_num)
    print > file
}
' "$PLANTUML_FILE"

# Count extracted diagrams
DIAGRAM_COUNT=$(ls -1 "$TEMP_DIR"/*.puml 2>/dev/null | wc -l | tr -d ' ')

if [ "$DIAGRAM_COUNT" -eq 0 ]; then
    echo -e "${YELLOW}No PlantUML diagrams found${NC}"
    rm -rf "$TEMP_DIR"
    exit 0
fi

echo -e "${GREEN}✓${NC} Found $DIAGRAM_COUNT diagrams"

# Check if PlantUML is available
if command -v plantuml &> /dev/null; then
    echo -e "\n${BLUE}Using local PlantUML installation${NC}"
    USE_DOCKER=false
elif command -v docker &> /dev/null; then
    echo -e "\n${BLUE}Using PlantUML via Docker${NC}"
    USE_DOCKER=true
else
    echo -e "${YELLOW}Error: Neither PlantUML nor Docker is available${NC}"
    echo "Please install one of the following:"
    echo "  - PlantUML: brew install plantuml (macOS) or apt-get install plantuml (Linux)"
    echo "  - Docker: https://docs.docker.com/get-docker/"
    rm -rf "$TEMP_DIR"
    exit 1
fi

# Generate images
echo -e "\n${BLUE}Generating images...${NC}"

COUNTER=1
for puml_file in "$TEMP_DIR"/*.puml; do
    base_name=$(basename "$puml_file" .puml)
    output_file="$OUTPUT_DIR/$base_name.png"

    echo -e "  ${COUNTER}/${DIAGRAM_COUNT} - $base_name"

    if [ "$USE_DOCKER" = true ]; then
        docker run --rm \
            -v "$TEMP_DIR:/data" \
            -v "$OUTPUT_DIR:/output" \
            plantuml/plantuml \
            -tpng \
            "/data/$base_name.puml" \
            -o /output \
            2>/dev/null
    else
        plantuml -tpng "$puml_file" -o "$OUTPUT_DIR" 2>/dev/null
    fi

    COUNTER=$((COUNTER + 1))
done

# Cleanup
rm -rf "$TEMP_DIR"

echo -e "\n${GREEN}✓ Successfully generated $DIAGRAM_COUNT images${NC}"
echo -e "${GREEN}✓ Images saved to: $OUTPUT_DIR${NC}"

# Create index file
INDEX_FILE="$OUTPUT_DIR/index.md"
echo "# PlantUML Diagram Images" > "$INDEX_FILE"
echo "" >> "$INDEX_FILE"
echo "Generated on: $(date)" >> "$INDEX_FILE"
echo "" >> "$INDEX_FILE"

COUNTER=1
for img_file in "$OUTPUT_DIR"/*.png; do
    if [ -f "$img_file" ]; then
        base_name=$(basename "$img_file")
        echo "## Diagram $COUNTER" >> "$INDEX_FILE"
        echo "" >> "$INDEX_FILE"
        echo "![$base_name](./$base_name)" >> "$INDEX_FILE"
        echo "" >> "$INDEX_FILE"
        COUNTER=$((COUNTER + 1))
    fi
done

echo -e "${GREEN}✓ Created index file: $INDEX_FILE${NC}"
echo ""
echo -e "${BLUE}Done! 🎉${NC}"

