#!/bin/bash

# ColaFlow 开发环境启动脚本 (Bash)

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# 输出函数
success() { echo -e "${GREEN}$1${NC}"; }
info() { echo -e "${CYAN}$1${NC}"; }
warning() { echo -e "${YELLOW}$1${NC}"; }
error() { echo -e "${RED}$1${NC}"; }

# 横幅
info "
╔═══════════════════════════════════════════╗
║   ColaFlow Development Environment        ║
║   Docker-based Development Stack          ║
╚═══════════════════════════════════════════╝
"

# 检查 Docker
info "🔍 Checking Docker..."
if ! command -v docker &> /dev/null; then
    error "❌ Docker not found! Please install Docker."
    exit 1
fi

if ! docker info &> /dev/null; then
    error "❌ Docker is not running! Please start Docker."
    exit 1
fi

success "✅ Docker is ready"

# 参数处理
CLEAN=false
LOGS=false
STOP=false

while [[ $# -gt 0 ]]; do
    case $1 in
        --clean|-c)
            CLEAN=true
            shift
            ;;
        --logs|-l)
            LOGS=true
            shift
            ;;
        --stop|-s)
            STOP=true
            shift
            ;;
        *)
            echo "Unknown option: $1"
            echo "Usage: $0 [--clean] [--logs] [--stop]"
            exit 1
            ;;
    esac
done

# 停止服务
if [ "$STOP" = true ]; then
    info "🛑 Stopping all services..."
    docker-compose down
    success "✅ All services stopped"
    exit 0
fi

# 查看日志
if [ "$LOGS" = true ]; then
    info "📋 Showing logs (Ctrl+C to exit)..."
    docker-compose logs -f
    exit 0
fi

# 清理
if [ "$CLEAN" = true ]; then
    warning "🧹 Cleaning up containers and volumes..."
    docker-compose down -v
    info "🔨 Rebuilding images..."
    docker-compose build --no-cache
fi

# 检查 .env 文件
if [ ! -f ".env" ]; then
    if [ -f ".env.example" ]; then
        info "📄 Creating .env from .env.example..."
        cp .env.example .env
        success "✅ .env file created"
    else
        warning "⚠️  No .env or .env.example found, using docker-compose defaults"
    fi
fi

# 启动服务
info "🚀 Starting services..."
docker-compose up -d

# 等待健康检查
info "⏳ Waiting for services to be healthy..."
max_wait=60
waited=0
interval=2

while [ $waited -lt $max_wait ]; do
    if docker-compose ps | grep -q "unhealthy"; then
        sleep $interval
        waited=$((waited + interval))
        echo -n "."
    else
        break
    fi
done

echo ""

# 检查服务状态
info "\n📊 Service Status:"
docker-compose ps

success "\n🎉 ColaFlow development environment is ready!"

info "
📍 Access Points:
   Frontend:  http://localhost:3000
   Backend:   http://localhost:5000
   Swagger:   http://localhost:5000/scalar/v1
   Database:  localhost:5432 (colaflow/colaflow_dev_password)
   Redis:     localhost:6379

👤 Demo Accounts (see scripts/DEMO-ACCOUNTS.md):
   Owner:     owner@demo.com / Demo@123456
   Developer: developer@demo.com / Demo@123456

📝 Useful Commands:
   ./scripts/dev-start.sh --stop    # Stop all services
   ./scripts/dev-start.sh --logs    # View logs
   ./scripts/dev-start.sh --clean   # Clean rebuild
   docker-compose ps                # Check status
"
