#!/bin/bash

# CK Enhanced Installer Validation Script
# This script validates that the installer properly:
# 1. Installs upstream BMAD core and expansion packs
# 2. Installs CK expansion packs on top
# 3. Configures all 8 IDEs including GitHub Copilot

set -e  # Exit on error

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

# Test directory structure
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BASE_DIR="test-results/01-validate-installer"
TEST_INSTANCE="$BASE_DIR/$TIMESTAMP"

echo -e "${YELLOW}🧪 CK Enhanced Installer Validation${NC}"
echo "Test directory: $TEST_INSTANCE"
echo "Results will be saved in: $BASE_DIR/"
echo ""

# Clean up previous test
rm -rf "$TEST_INSTANCE"
mkdir -p "$TEST_INSTANCE"

# Step 1: Run the installer
echo -e "${YELLOW}📦 Running installer with --full flag...${NC}"
node ck-layer/bin/bmad-enhanced.js install --full --directory "$TEST_INSTANCE" --verbose

echo ""
echo -e "${YELLOW}🔍 Validating installation...${NC}"

# Step 2: Check BMAD core
if [ -d "$TEST_INSTANCE/.bmad-core" ]; then
    AGENT_COUNT=$(find "$TEST_INSTANCE/.bmad-core/agents" -name "*.md" 2>/dev/null | wc -l)
    echo -e "${GREEN}✅ BMAD Core installed (${AGENT_COUNT} agents)${NC}"
else
    echo -e "${RED}❌ BMAD Core NOT found${NC}"
    exit 1
fi

# Step 3: Check upstream expansion packs
UPSTREAM_PACKS=("bmad-2d-phaser-game-dev" "bmad-2d-unity-game-dev" "bmad-infrastructure-devops")
UPSTREAM_COUNT=0

for pack in "${UPSTREAM_PACKS[@]}"; do
    if [ -d "$TEST_INSTANCE/.$pack" ]; then
        echo -e "${GREEN}✅ Upstream pack: .$pack${NC}"
        ((UPSTREAM_COUNT++))
    else
        echo -e "${RED}❌ Missing upstream pack: .$pack${NC}"
    fi
done

# Step 4: Check CK expansion packs
CK_PACKS=("ck-llm-agent-dev" "ck-gitlab-cicd-automation" "ck-jira-integration" "ck-parallel-dev")
CK_COUNT=0

for pack in "${CK_PACKS[@]}"; do
    if [ -d "$TEST_INSTANCE/.$pack" ]; then
        echo -e "${GREEN}✅ CK pack: .$pack${NC}"
        ((CK_COUNT++))
    else
        echo -e "${RED}❌ Missing CK pack: .$pack${NC}"
    fi
done

# Step 5: Check IDE configurations
echo ""
echo -e "${YELLOW}🎯 Checking IDE configurations...${NC}"

IDE_CONFIGS=(
    ".cursor/rules:Cursor"
    ".claude/commands:Claude Code"
    ".windsurf/rules:Windsurf"
    ".trae/rules:Trae"
    ".clinerules:Cline"
    ".gemini:Gemini"
    ".roomodes:Roo"
    ".github/chatmodes:GitHub Copilot"
    ".vscode/settings.json:VS Code Settings"
)

IDE_COUNT=0
for config in "${IDE_CONFIGS[@]}"; do
    IFS=':' read -r path name <<< "$config"
    if [ -e "$TEST_INSTANCE/$path" ]; then
        echo -e "${GREEN}✅ $name${NC}"
        ((IDE_COUNT++))
    else
        echo -e "${RED}❌ Missing: $name ($path)${NC}"
    fi
done

# Step 6: Validate GitHub Copilot configuration
echo ""
echo -e "${YELLOW}🔧 Validating GitHub Copilot configuration...${NC}"

if [ -f "$TEST_INSTANCE/.vscode/settings.json" ]; then
    if grep -q "github.copilot.chat.agent" "$TEST_INSTANCE/.vscode/settings.json"; then
        echo -e "${GREEN}✅ VS Code settings configured for GitHub Copilot${NC}"
    else
        echo -e "${RED}❌ VS Code settings missing GitHub Copilot configuration${NC}"
    fi
fi

if [ -d "$TEST_INSTANCE/.github/chatmodes" ]; then
    CHATMODE_COUNT=$(find "$TEST_INSTANCE/.github/chatmodes" -name "*.chatmode.md" 2>/dev/null | wc -l)
    echo -e "${GREEN}✅ GitHub Copilot chatmodes created (${CHATMODE_COUNT} agents)${NC}"
else
    echo -e "${RED}❌ GitHub Copilot chatmodes directory missing${NC}"
fi

# Step 7: Summary
echo ""
echo -e "${YELLOW}📊 Summary:${NC}"
echo "- BMAD Core: $([ -d "$TEST_INSTANCE/.bmad-core" ] && echo "✅" || echo "❌")"
echo "- Upstream packs: $UPSTREAM_COUNT/3"
echo "- CK packs: $CK_COUNT/4"
echo "- IDE configs: $IDE_COUNT/9"

# Calculate total score
TOTAL_CHECKS=$((1 + 3 + 4 + 9))  # Core + upstream + CK + IDEs
PASSED_CHECKS=$(($([ -d "$TEST_INSTANCE/.bmad-core" ] && echo 1 || echo 0) + UPSTREAM_COUNT + CK_COUNT + IDE_COUNT))

echo ""
if [ $PASSED_CHECKS -eq $TOTAL_CHECKS ]; then
    echo -e "${GREEN}✅ All validation checks passed! ($PASSED_CHECKS/$TOTAL_CHECKS)${NC}"
    echo ""
    echo "Test installation location: $TEST_INSTANCE"
    exit 0
else
    echo -e "${RED}❌ Validation failed: $PASSED_CHECKS/$TOTAL_CHECKS checks passed${NC}"
    echo ""
    echo "Test installation location: $TEST_INSTANCE"
    exit 1
fi