#!/bin/bash
# Common validation functions for beta and stable test scripts

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Validate IDE installation
validate_ide_installation() {
    local TEST_DIR="$1"
    local EXPECTED_MIN_DIRS="${2:-8}"
    
    echo -e "${YELLOW}Validating IDE configurations...${NC}"
    
    # Expected IDE directories/files for a full installation
    # Note: Some IDEs create multiple directories
    local IDE_PATHS=(
        ".cursor/rules"           # Cursor
        ".claude"                 # Claude Code  
        ".windsurf/rules"         # Windsurf
        ".roo"                    # Roo Code (directory)
        ".roomodes"               # Roo Code (file)
        ".clinerules"             # Cline
        ".gemini/agents"          # Gemini CLI
        ".github/chatmodes"       # VS Code Copilot
        ".vscode"                 # VS Code Copilot (workspace settings)
        ".kilocodemodes"          # KiloCode (if installed)
    )
    
    local FOUND_COUNT=0
    local VALIDATION_PASSED=true
    
    echo "Checking for IDE configurations:"
    
    for ide_path in "${IDE_PATHS[@]}"; do
        if [ -e "$TEST_DIR/$ide_path" ]; then
            echo -e "  ${GREEN}✓ $ide_path${NC}"
            ((FOUND_COUNT++))
        else
            echo -e "  ${YELLOW}- $ide_path (not found)${NC}"
        fi
    done
    
    echo ""
    echo "Found $FOUND_COUNT IDE configurations"
    
    if [ "$FOUND_COUNT" -ge "$EXPECTED_MIN_DIRS" ]; then
        echo -e "${GREEN}✅ IDE validation passed (found $FOUND_COUNT configurations, expected ≥$EXPECTED_MIN_DIRS)${NC}"
        return 0
    else
        echo -e "${RED}❌ IDE validation failed: only $FOUND_COUNT configurations found (expected ≥$EXPECTED_MIN_DIRS)${NC}"
        return 1
    fi
}

# Validate basic BMAD structure
validate_basic_structure() {
    local TEST_DIR="$1"
    
    echo -e "${YELLOW}Validating basic BMAD structure...${NC}"
    
    local REQUIRED_DIRS=(
        ".bmad-core"
    )
    
    local REQUIRED_IDE_DIRS=(
        ".cursor"
        ".claude"
    )
    
    # Check required directories
    for dir in "${REQUIRED_DIRS[@]}"; do
        if [ ! -d "$TEST_DIR/$dir" ]; then
            echo -e "${RED}❌ Missing required directory: $dir${NC}"
            return 1
        fi
        echo -e "  ${GREEN}✓ $dir${NC}"
    done
    
    # Check at least one IDE directory exists
    local IDE_FOUND=false
    for ide_dir in "${REQUIRED_IDE_DIRS[@]}"; do
        if [ -d "$TEST_DIR/$ide_dir" ]; then
            IDE_FOUND=true
            echo -e "  ${GREEN}✓ $ide_dir${NC}"
            break
        fi
    done
    
    if [ "$IDE_FOUND" = true ]; then
        echo -e "${GREEN}✅ Basic structure validated${NC}"
        return 0
    else
        echo -e "${RED}❌ Basic structure validation failed${NC}"
        echo "Expected: .bmad-core directory and at least one IDE directory (.cursor or .claude)"
        echo "Found:"
        ls -la "$TEST_DIR" | grep -E "^\."
        return 1
    fi
}

# Get the count of installed IDEs
get_ide_count() {
    local TEST_DIR="$1"
    
    # Count all IDE-related directories and files
    local IDE_PATTERNS=(
        ".cursor"
        ".claude" 
        ".windsurf"
        ".roo"
        ".roomodes"
        ".clinerules"
        ".gemini"
        ".github"
        ".vscode"
        ".kilocodemodes"
    )
    
    local count=0
    for pattern in "${IDE_PATTERNS[@]}"; do
        if [ -e "$TEST_DIR/$pattern" ]; then
            ((count++))
        fi
    done
    
    echo "$count"
}

# Check if Kilocode is installed
check_kilocode_installation() {
    local TEST_DIR="$1"
    
    if [ -f "$TEST_DIR/.kilocodemodes" ]; then
        echo -e "${GREEN}✓ KiloCode configuration found${NC}"
        return 0
    else
        echo -e "${YELLOW}- KiloCode not installed (optional)${NC}"
        return 1
    fi
}