#!/system/bin/sh
# Magisk 模块通用 update-binary 脚本（含权限自动配置）
# 适配 Magisk 24.0+ 版本

# 跳过默认的解压逻辑（由自定义逻辑处理）
SKIPUNZIP=1
ASH_STANDALONE=1

# ====================== 辅助函数：输出日志 ======================
ui_print() {
    if [ -n "$1" ]; then
        echo -e "ui_print $1\nui_print" >> /proc/self/fd/0
    fi
}

# ====================== 第一步：加载 Magisk 核心函数 ======================
ui_print "正在加载 Magisk 核心组件..."
MAGISK_UTIL_PATH=""
if [ -f /data/adb/magisk/util_functions.sh ]; then
    MAGISK_UTIL_PATH="/data/adb/magisk/util_functions.sh"
elif [ -f /data/adb/magisk/scripts/util_functions.sh ]; then
    MAGISK_UTIL_PATH="/data/adb/magisk/scripts/util_functions.sh"
else
    ui_print "! 错误：未找到 Magisk util_functions.sh"
    ui_print "! 请确保已安装 Magisk 24.0 及以上版本"
    exit 1
fi

# 加载 Magisk 核心函数
. "$MAGISK_UTIL_PATH" || {
    ui_print "! 错误：加载 Magisk 核心函数失败"
    exit 1
}

# ====================== 第二步：初始化模块目录 ======================
ui_print "正在初始化模块目录..."
# 初始化模块路径（MODPATH 为 Magisk 模块的安装目录：/data/adb/modules/模块ID/）
initialize_mod ${0%/*} || {
    ui_print "! 错误：模块目录初始化失败"
    exit 1
}

# ====================== 第三步：解压模块文件到 MODPATH ======================
ui_print "正在解压模块文件..."
# 解压 ZIP 包到模块目录（忽略无关文件，仅解压核心内容）
unzip -o "$ZIPFILE" -d "$MODPATH" >&2 || {
    ui_print "! 错误：模块文件解压失败"
    exit 1
}

# ====================== 第四步：自动赋予脚本可执行权限 ======================
ui_print "正在配置脚本权限..."

# 1. 赋予 update-binary 自身可执行权限（防打包时权限丢失）
if [ -f "$MODPATH/META-INF/com/google/android/update-binary" ]; then
    chmod 0755 "$MODPATH/META-INF/com/google/android/update-binary"
    ui_print "  - 已配置 update-binary 权限"
fi

# 2. 赋予 post-fs-data.sh 可执行权限（核心替换脚本）
if [ -f "$MODPATH/post-fs-data.sh" ]; then
    chmod 0755 "$MODPATH/post-fs-data.sh"
    ui_print "  - 已配置 post-fs-data.sh 权限"
fi

# 3. 赋予 service.sh 可执行权限（后台服务脚本）
if [ -f "$MODPATH/service.sh" ]; then
    chmod 0755 "$MODPATH/service.sh"
    ui_print "  - 已配置 service.sh 权限"
fi

# 4. 可选：赋予自定义脚本（如 init.sh）可执行权限（按需添加）
if [ -f "$MODPATH/init.sh" ]; then
    chmod 0755 "$MODPATH/init.sh"
    ui_print "  - 已配置 init.sh 权限"
fi

# ====================== 第五步：清理冗余文件（可选） ======================
# 删除模块中的临时文件、说明文档等（按需调整）
rm -f "$MODPATH/README.md" "$MODPATH/.gitignore" "$MODPATH/temp.txt" >&2

# ====================== 完成安装 ======================
ui_print ""
ui_print "模块安装成功！"
ui_print "重启手表后模块生效"
ui_print ""

exit 0