#!/bin/bash

# 设置变量
SOURCE_URL="http://openresty.org/package/"
DEST_DIR="/opt/mirrors/openresty"
LOG_FILE="/var/log/openresty_mirror.log"
LOCK_FILE="/var/lock/openresty_mirror.lock"

# 设置要包含的目录（只要 debian 和 ubuntu）
INCLUDE_DIRS="debian ubuntu"

# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 检查锁文件
if [ -e "$LOCK_FILE" ]; then
    if [ -n "$(find "$LOCK_FILE" -mmin +180)" ]; then
        log "发现过期的锁文件 - 强制解锁"
        rm -f "$LOCK_FILE"
    else
        log "同步已在进行中，退出"
        exit 1
    fi
fi

# 创建锁文件
touch "$LOCK_FILE"

# 确保目标目录存在
mkdir -p "$DEST_DIR"

log "开始同步 OpenResty 包仓库 (仅 Debian 和 Ubuntu)"

# 创建 lftp 脚本文件
LFTP_SCRIPT=$(mktemp)
cat > "$LFTP_SCRIPT" << 'EOFSCRIPT'
# 设置连接选项
set net:timeout 300
set net:max-retries 3
set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 1
set mirror:parallel-directories true
set mirror:parallel-transfer-count 4
set xfer:log yes

# 主镜像命令
mirror \
  --continue \
  --delete \
  --verbose \
  --exclude-glob .*
EOFSCRIPT

# 添加排除选项 - 排除所有，然后只包含需要的
echo "  --exclude-glob */" >> "$LFTP_SCRIPT"
for dir in $INCLUDE_DIRS; do
    echo "  --include-glob $dir/" >> "$LFTP_SCRIPT"
    echo "  --include-glob $dir/**" >> "$LFTP_SCRIPT"
done

# 添加源和目标
echo "  \"$SOURCE_URL\" \"$DEST_DIR\"" >> "$LFTP_SCRIPT"

# 运行 lftp 脚本
lftp -f "$LFTP_SCRIPT" >> "$LOG_FILE" 2>&1
SYNC_RESULT=$?

# 清理临时脚本
rm -f "$LFTP_SCRIPT"

# 检查结果
if [ $SYNC_RESULT -eq 0 ]; then
    log "OpenResty 仓库同步成功完成"
else
    log "OpenResty 仓库同步失败，退出码: $SYNC_RESULT"
fi

# 创建同步时间戳文件
echo "Last synced: $(date)" > "$DEST_DIR/.last_synced"

# 移除锁文件
rm -f "$LOCK_FILE"

exit $SYNC_RESULT
