#!/bin/bash
# Verify all prerequisites for LocalStack development environment

echo "=== LocalStack Prerequisites Checker ==="
echo ""

all_good=true

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

# Docker
echo -n "Docker: "
if command -v docker &> /dev/null; then
    version=$(docker --version)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${RED}NOT INSTALLED${NC}"
    all_good=false
fi

# Docker Compose
echo -n "Docker Compose: "
if docker compose version &> /dev/null 2>&1; then
    version=$(docker compose version)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${RED}NOT INSTALLED${NC}"
    all_good=false
fi

# Terraform
echo -n "Terraform: "
if command -v terraform &> /dev/null; then
    version=$(terraform --version | head -1)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${RED}NOT INSTALLED${NC}"
    all_good=false
fi

# AWS CLI
echo -n "AWS CLI: "
if command -v aws &> /dev/null; then
    version=$(aws --version 2>&1)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${RED}NOT INSTALLED${NC}"
    all_good=false
fi

echo ""
echo "=== Optional Tools ==="

# tflocal
echo -n "tflocal: "
if command -v tflocal &> /dev/null; then
    version=$(tflocal --version 2>&1 | head -1)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${YELLOW}Not installed (optional but recommended)${NC}"
    echo "  Install: pip3 install terraform-local"
fi

# jq
echo -n "jq: "
if command -v jq &> /dev/null; then
    version=$(jq --version)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${YELLOW}Not installed (optional)${NC}"
    echo "  Install: brew install jq"
fi

# LocalStack CLI
echo -n "LocalStack CLI: "
if command -v localstack &> /dev/null; then
    version=$(localstack --version 2>&1)
    echo -e "${GREEN}$version${NC}"
else
    echo -e "${YELLOW}Not installed (optional)${NC}"
    echo "  Install: pip3 install localstack"
fi

echo ""
echo "=== Docker Status ==="
if docker ps &> /dev/null; then
    echo -e "${GREEN}Docker is running${NC}"

    # Check for existing LocalStack container
    if docker ps -a --format '{{.Names}}' | grep -q "localstack"; then
        if docker ps --format '{{.Names}}' | grep -q "localstack"; then
            echo -e "${GREEN}LocalStack container is running${NC}"
        else
            echo -e "${YELLOW}LocalStack container exists but is stopped${NC}"
        fi
    fi
else
    echo -e "${RED}Docker is not running${NC}"
    echo "  Start Docker Desktop application"
    all_good=false
fi

echo ""
echo "=== Configuration ==="

# Check .env file
if [ -f ".env" ]; then
    echo -e "${GREEN}.env file exists${NC}"
else
    echo -e "${YELLOW}.env file not found${NC}"
    echo "  Run: cp .env.shadow .env"
fi

# Check AWS environment variables
if [ -f ".env" ]; then
    missing_vars=()
    for var in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION AWS_ENDPOINT_URL; do
        if ! grep -q "^${var}=" .env 2>/dev/null; then
            missing_vars+=("$var")
        fi
    done

    if [ ${#missing_vars[@]} -eq 0 ]; then
        echo -e "${GREEN}AWS environment variables configured${NC}"
    else
        echo -e "${YELLOW}Missing AWS variables in .env: ${missing_vars[*]}${NC}"
    fi
fi

# Check local terraform directories
echo -n "Terraform projects: "
if [ -d "terraform" ]; then
    project_count=$(ls -1 terraform/ | grep -v "^_" | wc -l | tr -d ' ')
    if [ "$project_count" -gt 0 ]; then
        echo -e "${GREEN}$project_count projects found${NC}"
        ls -1 terraform/ | grep -v "^_" | sed 's/^/  - /'
    else
        echo -e "${YELLOW}No projects found in terraform/${NC}"
    fi
else
    echo -e "${YELLOW}terraform/ directory not found${NC}"
fi

echo ""
echo "=== Summary ==="
if [ "$all_good" = true ]; then
    echo -e "${GREEN}All required prerequisites are installed!${NC}"
    echo ""
    echo "Next steps:"
    if [ ! -f ".env" ]; then
        echo "  1. cp .env.shadow .env"
        echo "  2. make deploy-all   # Deploy all projects"
    else
        echo "  - make deploy-all   # Deploy all projects"
        echo "  - make up          # Start + deploy current project"
        echo "  - make help        # See all commands"
    fi
else
    echo -e "${RED}Some required tools are missing${NC}"
    echo ""
    echo "Please install the missing tools listed above."
fi
