#!/system/bin/sh

# 复合操作流程：刷入 -> 删除原文件 -> 提取验证
# 需要root权限执行

# 定义公共函数
get_slot_info() {
  # 获取A/B分区信息
  current_slot=$(getprop ro.boot.slot_suffix 2>/dev/null)
  [ -z "$current_slot" ] && { echo "错误：设备不支持A/B分区！"; exit 1; }
  
  # 确定目标槽位
  target_slot=$([ "$current_slot" = "_a" ] && echo "_b" || echo "_a")
  echo "当前槽位: $current_slot | 目标槽位: $target_slot"
}

check_dtbo_partition() {
  # 检查分区是否存在
  dtbo_partition="/dev/block/by-name/dtbo${1}"
  [ ! -e "$dtbo_partition" ] && { echo "错误：分区 $dtbo_partition 不存在"; exit 1; }
}

# 阶段1：刷入非活动分区
get_slot_info
check_dtbo_partition "$target_slot"

if [ ! -f "dtbo.img" ]; then
  echo "错误：当前目录未找到dtbo.img"
  exit 1
fi

echo "正在刷写 dtbo.img 到 dtbo${target_slot}..."
if ! dd if=dtbo.img of="$dtbo_partition" bs=1M 2>/dev/null; then
  echo "刷写失败，终止流程"
  exit 1
fi

# 阶段2：清理旧文件
echo "删除原始文件 dtbo.img..."
rm -f dtbo.img
[ -f "dtbo.img" ] && { echo "文件删除失败"; exit 1; }

# 阶段3：提取验证
echo "正在从 dtbo${target_slot} 提取验证..."
if ! dd if="$dtbo_partition" of=./dtbo.img bs=1M 2>/dev/null; then
  echo "提取验证失败"
  exit 1
fi

# 最终校验
echo "操作完成！最终文件信息："
file_size=$(du -h dtbo.img | awk '{print $1}')
echo "路径: $(pwd)/dtbo.img (大小: $file_size)"
