#!/bin/bash
# 把已有部分文件当"头部"，剩余区间分块并行下载后拼接（用于把慢速单连接下载提速）
set -u
BASE=https://hf-mirror.com
REPO="$1"; REV="$2"; REL="$3"; DEST="$4"; CHUNKS="${5:-6}"
URL="$BASE/$REPO/resolve/$REV/$REL"
OUT="$DEST/$REL"
TMP=/home/zyw/yue2-par/finish-$(echo "$REPO-$REL" | tr '/' '_')
mkdir -p "$(dirname "$OUT")" "$TMP"

TOTAL=$(curl -sIL -m 30 "$URL" | grep -i '^content-length' | tail -1 | tr -d '\r' | awk '{print $2}')
[ -z "$TOTAL" ] && { echo "无法取得总大小"; exit 1; }
HAVE=$(stat -c%s "$OUT" 2>/dev/null || echo 0)
echo "总大小 $TOTAL 已有 $HAVE"
if [ "$HAVE" -ge "$TOTAL" ]; then echo "已完成，无需续传"; exit 0; fi

# 头部留到最后拼接，避免边下边写
HEAD="$TMP/head"
if [ "$HAVE" -gt 0 ] && [ ! -f "$HEAD" ]; then mv "$OUT" "$HEAD"; HAVE=$(stat -c%s "$HEAD"); fi
[ -f "$HEAD" ] || { : > "$HEAD"; HAVE=0; }

REMAIN=$(( TOTAL - HAVE ))
PART=$(( REMAIN / CHUNKS + 1 ))
pids=()
for i in $(seq 0 $((CHUNKS-1))); do
  s=$(( HAVE + i * PART )); e=$(( s + PART - 1 )); [ $e -ge "$TOTAL" ] && e=$(( TOTAL - 1 ))
  [ $s -gt $e ] && continue
  ( curl -L --retry 8 --retry-delay 3 --retry-all-errors -sS -r "$s-$e" -o "$TMP/c$i" "$URL" ) &
  pids+=($!)
done
for p in "${pids[@]}"; do wait "$p"; done

cat "$HEAD" "$TMP"/c* > "$TMP/merged" 2>/dev/null
GOT=$(stat -c%s "$TMP/merged")
if [ "$GOT" != "$TOTAL" ]; then echo "FAIL 拼接后 $GOT != $TOTAL"; exit 1; fi
mv "$TMP/merged" "$OUT"
echo "OK $REL $(stat -c%s "$OUT")"
rm -rf "$TMP"
