#!/bin/bash

# 后端Docker镜像构建脚本
# 用于构建若依后端应用的Docker镜像

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

# 脚本配置
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
IMAGE_NAME="anxin-backend"
IMAGE_TAG="latest"

# 颜色输出
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} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

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

# 显示帮助信息
show_help() {
    cat << EOF
后端Docker镜像构建脚本

用法: $0 [选项]

选项:
    -t, --tag TAG       设置镜像标签 (默认: latest)
    -n, --name NAME     设置镜像名称 (默认: anxin-backend)
    --no-cache          不使用缓存构建
    --clean             构建前清理Maven缓存
    -h, --help          显示此帮助信息

示例:
    $0                          # 使用默认设置构建
    $0 -t v1.0.0               # 构建并标记为v1.0.0
    $0 --no-cache              # 不使用缓存构建
    $0 --clean -t dev          # 清理后构建dev版本

EOF
}

# 解析命令行参数
parse_args() {
    while [[ $# -gt 0 ]]; do
        case $1 in
            -t|--tag)
                IMAGE_TAG="$2"
                shift 2
                ;;
            -n|--name)
                IMAGE_NAME="$2"
                shift 2
                ;;
            --no-cache)
                NO_CACHE="--no-cache"
                shift
                ;;
            --clean)
                CLEAN_BUILD=true
                shift
                ;;
            -h|--help)
                show_help
                exit 0
                ;;
            *)
                log_error "未知参数: $1"
                show_help
                exit 1
                ;;
        esac
    done
}

# 检查Docker是否可用
check_docker() {
    if ! command -v docker &> /dev/null; then
        log_error "Docker未安装或不在PATH中"
        exit 1
    fi

    if ! docker info &> /dev/null; then
        log_error "Docker守护进程未运行"
        exit 1
    fi
}

# 清理Maven缓存
clean_maven() {
    if [[ "$CLEAN_BUILD" == "true" ]]; then
        log_info "清理Maven缓存..."
        cd "$PROJECT_ROOT"
        if command -v mvn &> /dev/null; then
            mvn clean
        else
            log_warning "Maven未安装，跳过清理步骤"
        fi
    fi
}

# 构建Docker镜像
build_image() {
    log_info "开始构建Docker镜像..."
    log_info "项目根目录: $PROJECT_ROOT"
    log_info "镜像名称: $IMAGE_NAME:$IMAGE_TAG"
    
    cd "$PROJECT_ROOT"
    
    # 构建命令
    BUILD_CMD="docker build -f docker/backend/Dockerfile -t $IMAGE_NAME:$IMAGE_TAG $NO_CACHE ."
    
    log_info "执行构建命令: $BUILD_CMD"
    
    if eval "$BUILD_CMD"; then
        log_success "Docker镜像构建成功: $IMAGE_NAME:$IMAGE_TAG"
    else
        log_error "Docker镜像构建失败"
        exit 1
    fi
}

# 显示镜像信息
show_image_info() {
    log_info "镜像信息:"
    docker images "$IMAGE_NAME:$IMAGE_TAG" --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}"
}

# 主函数
main() {
    log_info "开始构建若依后端Docker镜像..."
    
    parse_args "$@"
    check_docker
    clean_maven
    build_image
    show_image_info
    
    log_success "构建完成!"
    log_info "运行镜像: docker run -d -p 8080:8080 --name anxin-backend-container $IMAGE_NAME:$IMAGE_TAG"
}

# 执行主函数
main "$@"