#!/bin/bash
# update-latest-link.sh — 根据 latest.yml 更新稳定下载软链 TWork-Setup.exe
#
# 部署位置：/data/twork-releases/update-latest-link.sh
# 用法：
#   bash /data/twork-releases/update-latest-link.sh            # 仅更新软链
#   bash /data/twork-releases/update-latest-link.sh --archive  # 顺便归档旧版本
#
# 原理：latest.yml 的顶层 `path` 字段是当前最新安装包路径（唯一事实源），
#       据此把 TWork-Setup.exe 软链指过去。对外固定地址 /TWork-Setup.exe 永远指向最新版。

set -e
DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$DIR"

YML="$DIR/latest.yml"
[ -f "$YML" ] || { echo "latest.yml 不存在: $YML"; exit 1; }

# 取顶层 path：path: 0.1.6/TWork-0.1.6-setup.exe
REL_PATH=$(grep -E '^path:' "$YML" | head -1 | sed -E 's/^path:[[:space:]]*//; s/[[:space:]]*$//')
[ -n "$REL_PATH" ] || { echo "未从 latest.yml 解析到 path 字段"; exit 1; }

VERSION="${REL_PATH%%/*}"
[ -f "$REL_PATH" ] || { echo "目标安装包不存在: $DIR/$REL_PATH（请确认已上传）"; exit 1; }

ln -sfn "$REL_PATH" TWork-Setup.exe
echo "OK 软链已更新: TWork-Setup.exe -> $REL_PATH"

if [ "$1" = "--archive" ]; then
  mkdir -p archive
  for d in [0-9]*.[0-9]*.[0-9]*; do
    if [ -d "$d" ] && [ "$d" != "$VERSION" ]; then
      mkdir -p "archive/$d"
      # exe 移至 archive/ 释放磁盘空间，原路径留软链保持可访问
      for f in "$d"/*.exe; do
        [ -f "$f" ] || continue
        [ -L "$f" ] && continue
        mv "$f" "archive/$d/"
        ln -sfn "$DIR/archive/$d/$(basename "$f")" "$f"
      done
      # blockmap 保留在原路径（差量更新需要），archive 留软链
      for f in "$d"/*.blockmap; do
        [ -f "$f" ] || continue
        [ -L "$f" ] && continue
        [ -L "archive/$d/$(basename "$f")" ] && continue
        ln -sfn "$DIR/$d/$(basename "$f")" "archive/$d/$(basename "$f")"
      done
      echo "  归档: $d (exe→archive，blockmap 保留原路径)"
    fi
  done
fi

echo "-- 状态 --"
ls -l TWork-Setup.exe
grep -E '^(version|path):' "$YML"
