#!/bin/bash

set -e

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

log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

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

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

# 显示帮助信息
show_help() {
    echo "Argus-Metric Artifact 发布脚本"
    echo
    echo "用法: $0 <版本号>"
    echo
    echo "参数:"
    echo "  <版本号>    要发布的版本号，对应 artifact 目录中的版本"
    echo
    echo "示例:"
    echo "  $0 1.20.0    # 发布 1.20.0 版本"
    echo
}

# 检查参数
if [[ $# -ne 1 ]]; then
    log_error "请提供版本号参数"
    show_help
    exit 1
fi

VERSION="$1"
ARTIFACT_DIR="artifact/$VERSION"
PUBLISH_DIR="/Users/sundapeng/Project/nlp/aiops/client-plugins/all-in-one/publish/"

# 检查版本目录是否存在
if [[ ! -d "$ARTIFACT_DIR" ]]; then
    log_error "版本目录不存在: $ARTIFACT_DIR"
    exit 1
fi

log_info "开始发布版本: $VERSION"

# 确保发布目录存在
log_info "确保发布目录存在: $PUBLISH_DIR"
mkdir -p "$PUBLISH_DIR"

# 创建临时目录用于打包
TEMP_PACKAGE_DIR="/tmp/argus-metric-package-$$"
mkdir -p "$TEMP_PACKAGE_DIR"

# 复制所有 tar.gz 文件到临时目录
log_info "准备 artifact 文件..."
tar_files=$(find "$ARTIFACT_DIR" -name "*.tar.gz" -type f)

if [[ -z "$tar_files" ]]; then
    log_error "在 $ARTIFACT_DIR 中未找到 tar.gz 文件"
    exit 1
fi

for file in $tar_files; do
    filename=$(basename "$file")
    log_info "  准备: $filename"
    cp "$file" "$TEMP_PACKAGE_DIR/"
done

# 复制版本信息文件
if [[ -f "$ARTIFACT_DIR/version.json" ]]; then
    log_info "复制版本信息文件..."
    cp "$ARTIFACT_DIR/version.json" "$TEMP_PACKAGE_DIR/"
fi

# 复制健康检查脚本
if [[ -f "$ARTIFACT_DIR/check_health.sh" ]]; then
    log_info "复制健康检查脚本..."
    cp "$ARTIFACT_DIR/check_health.sh" "$TEMP_PACKAGE_DIR/"
elif [[ -f "scripts/check_health.sh" ]]; then
    log_info "复制健康检查脚本 (从当前目录)..."
    cp "scripts/check_health.sh" "$TEMP_PACKAGE_DIR/"
else
    log_warning "未找到 check_health.sh 文件"
fi

# 复制安装脚本并重命名为 install.sh
if [[ -f "scripts/install_artifact.sh" ]]; then
    log_info "复制安装脚本..."
    cp "scripts/install_artifact.sh" "$TEMP_PACKAGE_DIR/install.sh"
fi

if [[ -f "scripts/uninstall_artifact.sh" ]]; then
    log_info "复制卸载脚本..."
    cp "scripts/uninstall_artifact.sh" "$TEMP_PACKAGE_DIR/uninstall.sh"
fi

# 复制配置文件
if [[ -f "$ARTIFACT_DIR/config.env" ]]; then
    log_info "复制配置文件..."
    cp "$ARTIFACT_DIR/config.env" "$TEMP_PACKAGE_DIR/"
    log_success "配置文件复制完成"
else
    log_warning "未找到 config.env 文件"
fi

# 复制 deps 目录
if [[ -d "$ARTIFACT_DIR/deps" ]]; then
    log_info "复制系统依赖包..."
    cp -r "$ARTIFACT_DIR/deps" "$TEMP_PACKAGE_DIR/"
    log_success "系统依赖包复制完成"
fi

# 创建tar包，使用新的命名规范
TAR_NAME="argus-metric_$(echo $VERSION | tr '.' '_').tar.gz"
log_info "创建发布包: $TAR_NAME"
cd "$TEMP_PACKAGE_DIR"
tar -czf "$PUBLISH_DIR/$TAR_NAME" *
cd - > /dev/null

# 清理临时目录
rm -rf "$TEMP_PACKAGE_DIR"

# 更新 LATEST_VERSION 文件
log_info "更新 LATEST_VERSION 文件..."
echo "$VERSION" > "$PUBLISH_DIR/LATEST_VERSION"

# 复制 setup.sh 到发布目录
if [[ -f "scripts/setup.sh" ]]; then
    log_info "复制 setup.sh 到发布目录..."
    cp "scripts/setup.sh" "$PUBLISH_DIR/"
fi

# 显示发布结果
log_success "版本 $VERSION 发布完成！"
echo
echo "发布目录: $PUBLISH_DIR"
echo "发布包: $PUBLISH_DIR/$TAR_NAME"
echo "包大小: $(du -h "$PUBLISH_DIR/$TAR_NAME" | cut -f1)"
echo "最新版本: $(cat "$PUBLISH_DIR/LATEST_VERSION")"
echo
echo "发布目录中的文件:"
ls -la "$PUBLISH_DIR" | while read line; do
    echo "  $line"
done
echo
echo "使用方法:"
echo "  1. 确保 /srv/ftp/share 目录可通过 FTP 访问"
echo "  2. 用户首先下载安装脚本:"
echo "     curl -u ftpuser:admin1234 ftp://10.211.55.4/setup.sh -o setup.sh"
echo "  3. 然后执行安装 (自动获取最新版本):"
echo "     sudo sh setup.sh"
echo "  4. 或者指定版本安装:"
echo "     sudo sh setup.sh --version $VERSION"
echo "  5. 或者指定不同的FTP服务器:"
echo "     sudo sh setup.sh --server 192.168.1.100 --user myuser --password mypass"
