#!/bin/bash
# Docker development environment manager

set -e

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

print_status() { echo -e "${BLUE}[INFO]${NC} $1"; }
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }

# Get user ID and group ID for proper file permissions
export USER_ID=$(id -u)
export GROUP_ID=$(id -g)

case "$1" in
    "up"|"start")
        print_status "Starting KotaDB development environment..."
        docker-compose -f docker-compose.dev.yml up -d
        print_success "Development environment started!"
        print_status "Connect with: $0 shell"
        ;;
    
    "down"|"stop")
        print_status "Stopping KotaDB development environment..."
        docker-compose -f docker-compose.dev.yml down
        print_success "Development environment stopped!"
        ;;
    
    "restart")
        print_status "Restarting KotaDB development environment..."
        docker-compose -f docker-compose.dev.yml restart
        print_success "Development environment restarted!"
        ;;
    
    "shell"|"bash")
        print_status "Connecting to development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev bash
        ;;
    
    "build")
        print_status "Building development container..."
        docker-compose -f docker-compose.dev.yml build --no-cache
        print_success "Development container built!"
        ;;
    
    "logs")
        docker-compose -f docker-compose.dev.yml logs -f "${2:-kotadb-dev}"
        ;;
    
    "ps"|"status")
        docker-compose -f docker-compose.dev.yml ps
        ;;
    
    "clean")
        print_warning "This will remove all containers, volumes, and images!"
        read -p "Are you sure? (y/N): " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            print_status "Cleaning up development environment..."
            docker-compose -f docker-compose.dev.yml down -v --rmi all
            docker system prune -f
            print_success "Development environment cleaned!"
        else
            print_status "Cleanup cancelled."
        fi
        ;;
    
    "test")
        print_status "Running tests in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev cargo test --all
        ;;
    
    "watch")
        print_status "Starting cargo watch in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev cargo watch -x 'test --lib' -x 'clippy'
        ;;
    
    "fmt")
        print_status "Formatting code in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev cargo fmt --all
        ;;
    
    "clippy")
        print_status "Running clippy in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev cargo clippy --all-targets --all-features
        ;;
    
    "docs")
        print_status "Building documentation in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev cargo doc --no-deps
        print_success "Documentation available at http://localhost:8001"
        ;;
    
    "mcp")
        print_status "Starting MCP server in development mode..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev ./dev.sh mcp
        ;;
    
    "demo")
        print_status "Running KotaDB demo in development container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev ./run_standalone.sh demo
        ;;
    
    "setup")
        print_status "Setting up development environment in container..."
        docker-compose -f docker-compose.dev.yml exec kotadb-dev ./scripts/dev/dev-setup.sh
        ;;
    
    "ports")
        print_status "Development environment ports:"
        echo "  8080  - MCP Server"
        echo "  8000  - Live documentation"
        echo "  8001  - Documentation server"
        echo "  9090  - Metrics/monitoring"
        echo "  5432  - PostgreSQL (optional)"
        echo "  6379  - Redis (optional)"
        ;;
    
    *)
        echo "KotaDB Docker Development Environment"
        echo ""
        echo "Usage: $0 <command>"
        echo ""
        echo "Environment Management:"
        echo "  up, start     - Start development environment"
        echo "  down, stop    - Stop development environment"
        echo "  restart       - Restart development environment"
        echo "  build         - Rebuild development container"
        echo "  clean         - Remove all containers and volumes"
        echo "  ps, status    - Show container status"
        echo "  logs [service] - Show logs (default: kotadb-dev)"
        echo ""
        echo "Development Commands:"
        echo "  shell, bash   - Connect to development container"
        echo "  test          - Run tests"
        echo "  watch         - Watch for changes and run tests"
        echo "  fmt           - Format code"
        echo "  clippy        - Run clippy linting"
        echo "  docs          - Build and serve documentation"
        echo "  demo          - Run KotaDB demo"
        echo "  mcp           - Start MCP server"
        echo "  setup         - Run development setup"
        echo ""
        echo "Information:"
        echo "  ports         - Show port mappings"
        echo ""
        echo "Examples:"
        echo "  $0 up         - Start development environment"
        echo "  $0 shell      - Connect to container"
        echo "  $0 test       - Run tests in container"
        echo "  $0 watch      - Start development watch mode"
        ;;
esac
