#!/bin/bash

# RTSP视频流管理系统 - Docker快速启动脚本
# 适用于AMD64平台

set -e

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

# 打印带颜色的消息
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查Docker是否安装
check_docker() {
    if ! command -v docker &> /dev/null; then
        print_error "Docker未安装，请先安装Docker"
        exit 1
    fi
    print_info "Docker版本: $(docker --version)"
}

# 检查Docker Compose是否安装
check_docker_compose() {
    if command -v docker-compose &> /dev/null; then
        print_info "Docker Compose版本: $(docker-compose --version)"
        return 0
    elif docker compose version &> /dev/null; then
        print_info "Docker Compose (plugin)版本: $(docker compose version)"
        return 0
    else
        print_warn "Docker Compose未安装，将使用docker命令"
        return 1
    fi
}

# 创建必要的目录
create_directories() {
    print_info "创建输出目录..."
    mkdir -p output
    print_info "输出目录已创建: $(pwd)/output"
}

# 使用Docker Compose启动
start_with_compose() {
    print_info "使用Docker Compose启动服务..."
    
    if command -v docker-compose &> /dev/null; then
        docker-compose up -d
    else
        docker compose up -d
    fi
    
    print_info "服务已启动"
}

# 使用Docker命令启动
start_with_docker() {
    print_info "使用Docker命令启动服务..."
    
    # 检查容器是否已存在
    if docker ps -a | grep -q jtjai_media; then
        print_warn "检测到已存在的容器，正在删除..."
        docker rm -f jtjai_media
    fi
    
    # 构建镜像
    print_info "构建Docker镜像..."
    docker build --build-arg BUILDPLATFORM=linux/amd64 --build-arg TARGETPLATFORM=linux/amd64 -t jtjai_media:latest .
    
    # 运行容器
    print_info "启动Docker容器..."
    docker run -d \
        --name jtjai_media \
        --platform linux/amd64 \
        -p 8080:8080 \
        -v "$(pwd)/output:/app/output" \
        -v "$(pwd)/config.json:/app/config.json:ro" \
        --restart unless-stopped \
        jtjai_media:latest
    
    print_info "服务已启动"
}

# 显示访问信息
show_access_info() {
    echo ""
    print_info "=========================================="
    print_info "RTSP视频流管理系统已成功启动！"
    print_info "=========================================="
    echo ""
    print_info "访问地址："
    echo "  🌐 Web管理界面: http://localhost:8080/manager"
    echo "  🏠 主页: http://localhost:8080/"
    echo "  📊 API文档: http://localhost:8080/api"
    echo ""
    print_info "管理命令："
    echo "  查看日志: docker logs -f jtjai_media"
    echo "  停止服务: docker stop jtjai_media"
    echo "  启动服务: docker start jtjai_media"
    echo "  删除容器: docker rm -f jtjai_media"
    echo ""
    print_info "输出目录: $(pwd)/output"
    print_info "=========================================="
}

# 主函数
main() {
    echo ""
    print_info "=========================================="
    print_info "RTSP视频流管理系统 - Docker部署"
    print_info "平台: AMD64"
    print_info "=========================================="
    echo ""
    
    # 检查Docker
    check_docker
    
    # 创建目录
    create_directories
    
    # 检查并启动
    if check_docker_compose; then
        start_with_compose
    else
        start_with_docker
    fi
    
    # 等待服务启动
    print_info "等待服务启动..."
    sleep 3
    
    # 检查服务状态
    if docker ps | grep -q jtjai_media; then
        print_info "✅ 容器运行正常"
        
        # 显示访问信息
        show_access_info
        
        # 询问是否查看日志
        echo ""
        read -p "是否查看实时日志? (y/n) " -n 1 -r
        echo ""
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            docker logs -f jtjai_media
        fi
    else
        print_error "❌ 容器启动失败"
        print_info "查看错误日志："
        docker logs jtjai_media
        exit 1
    fi
}

# 执行主函数
main
