#!/bin/bash
# 容器启动脚本 - 零配置自动迁移
# 功能：
# 1. 等待数据库就绪
# 2. 自动执行数据库迁移
# 3. 启动Flask应用

set -e  # 遇到错误立即退出

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

# 错误处理函数
handle_error() {
    log_error "容器启动过程中发生错误！"
    log_error "错误发生在第 $1 行"
    exit 1
}

# 设置错误处理
trap 'handle_error $LINENO' ERR

log_info "🚀 患者画像回访话术系统 - 容器启动"
log_info "📍 工作目录: $(pwd)"
log_info "📍 Python版本: $(python --version)"

# 第一步：等待数据库就绪
log_info "📋 第一步：等待数据库就绪..."
python database/scripts/wait-for-db.py
log_success "数据库连接就绪"

# 第二步：备份数据库
log_info "📋 第二步：备份数据库..."
python database/scripts/backup_database.py || log_warning "数据库备份失败，但继续启动应用"

# 第三步：执行数据库迁移
log_info "📋 第三步：执行数据库迁移..."

# 使用专门的迁移管理器
python database/scripts/migration_manager.py

if [ $? -eq 0 ]; then
    log_success "数据库迁移完成"
else
    log_error "数据库迁移失败"
    exit 1
fi

# 第四步：数据导入（如果需要）
log_info "📋 第四步：检查数据导入需求..."

# 检查是否有患者数据需要导入
if [ -f "database/scripts/safe_import_patients.py" ] && [ -d "data/patients/clinics" ]; then
    log_info "发现患者数据，执行数据导入..."
    python database/scripts/safe_import_patients.py || log_warning "数据导入失败，但继续启动应用"
    log_success "数据导入完成"
else
    log_info "无需数据导入"
fi

# 第五步：启动Flask应用
log_info "📋 第五步：启动Flask应用..."
log_info "🌐 应用将在端口 5000 启动"
log_info "🔗 健康检查端点: http://localhost:5000/api/health"

# 启动应用
log_success "🎉 容器启动完成，开始运行应用..."
exec python app.py
