# API Documentation Generation Tasks
# Provides TypeDoc-based API documentation generation in Markdown format.

version: '3'

tasks:
  default:
    desc: 'Show available documentation tasks'
    aliases: [help, h]
    silent: true
    cmds:
      - |
        # Color codes
        GREEN='\033[0;32m'
        YELLOW='\033[0;33m'
        BOLD='\033[1m'
        NC='\033[0m'

        echo -e "${BOLD}API Documentation Generation${NC}"
        echo ""
        echo "Command                          Alias     Description"
        echo "─────────────────────────────────────────────────────────────────────"
        echo -e "  ${GREEN}task docs:generate${NC}             ${YELLOW}g${NC}         Generate API docs from TypeScript"
        echo -e "  ${GREEN}task docs:clean${NC}                ${YELLOW}c${NC}         Remove generated documentation"
        echo -e "  ${GREEN}task docs:watch${NC}                ${YELLOW}w${NC}         Watch for changes and regenerate"
        echo -e "  ${GREEN}task docs:view${NC}                 ${YELLOW}v${NC}         Open generated docs in browser/editor"
        echo ""
        echo -e "${BOLD}Usage Examples:${NC}"
        echo -e "  task docs:generate                            # Generate API documentation"
        echo -e "  task docs:clean                               # Remove docs/api folder"
        echo -e "  task docs:watch                               # Watch for changes"

  generate:
    desc: 'Generate API documentation from TypeScript source'
    aliases: [g, gen]
    silent: true
    cmds:
      - |
        GREEN='\033[0;32m'
        YELLOW='\033[0;33m'
        NC='\033[0m'

        echo -e "${YELLOW}Generating API documentation...${NC}"

        # Run TypeDoc
        bun run docs:generate

        if [ $? -eq 0 ]; then
          echo -e "${GREEN}✓${NC} API documentation generated in docs/api/"
        else
          echo -e "\033[0;31m✗${NC} Documentation generation failed"
          exit 1
        fi

  clean:
    desc: 'Remove generated API documentation'
    aliases: [c]
    silent: true
    cmds:
      - |
        GREEN='\033[0;32m'
        NC='\033[0m'

        if [ -d docs/api ]; then
          rm -rf docs/api
          echo -e "${GREEN}✓${NC} Removed docs/api/"
        else
          echo "No generated documentation found"
        fi

  watch:
    desc: 'Watch source files and regenerate documentation on changes'
    aliases: [w]
    silent: false
    cmds:
      - |
        echo "Watching for changes... (Press Ctrl+C to stop)"
        bun run docs:watch

  view:
    desc: 'Open generated API documentation'
    aliases: [v]
    silent: true
    cmds:
      - |
        GREEN='\033[0;32m'
        YELLOW='\033[0;33m'
        RED='\033[0;31m'
        NC='\033[0m'

        if [ ! -d docs/api ]; then
          echo -e "${RED}✗${NC} No documentation found. Run: task docs:generate"
          exit 1
        fi

        # Try to open index file
        INDEX_FILE="docs/api/README.md"
        if [ -f "$INDEX_FILE" ]; then
          # Check if we're in VSCode
          if command -v code &> /dev/null; then
            code "$INDEX_FILE"
            echo -e "${GREEN}✓${NC} Opened in VSCode: $INDEX_FILE"
          # Check for default markdown viewer (macOS)
          elif [[ "$OSTYPE" == "darwin"* ]]; then
            open "$INDEX_FILE"
            echo -e "${GREEN}✓${NC} Opened: $INDEX_FILE"
          # Linux with xdg-open
          elif command -v xdg-open &> /dev/null; then
            xdg-open "$INDEX_FILE"
            echo -e "${GREEN}✓${NC} Opened: $INDEX_FILE"
          else
            echo -e "${YELLOW}⚠${NC} Cannot auto-open. View manually: $INDEX_FILE"
          fi
        else
          echo -e "${YELLOW}⚠${NC} Index file not found. Browse: docs/api/"
        fi

  rebuild:
    desc: 'Clean and regenerate API documentation'
    aliases: [r, regen]
    silent: true
    cmds:
      - task: clean
      - task: generate
