#!/system/bin/sh

MODDIR=${0%/*}
LOG_FILE="/data/adb/sensor_action.log"
MODULE_ID="gronsensor"

mkdir -p /data/adb

log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}

show_notification() {
if command -v notify >/dev/null 2>&1; then
notify "$1"
elif [ -f "/system/bin/ksu" ]; then
echo "$1" > /dev/kmsg 2>/dev/null
elif [ -f "/data/adb/aptach/aptach" ]; then
echo "$1" | tee /dev/kmsg > /proc/self/fd/1 2>/dev/null
else
echo "$1"
fi
log "$1"
}

detect_root_manager() {
if [ -f "/system/bin/magisk" ] || [ -f "/data/adb/magisk/magisk" ]; then
echo "magisk"
elif [ -f "/system/bin/ksu" ] || [ -d "/data/adb/ksu" ]; then
echo "kernelsu"
elif [ -f "/data/adb/aptach/aptach" ] || [ -d "/data/adb/aptach" ]; then
echo "aptach"
elif [ -f "/system/xbin/su" ] || [ -f "/system/bin/su" ]; then
echo "other"
else
echo "unknown"
fi
}

get_root_version() {
local manager=$1
case $manager in
"magisk")
if [ -f "/data/adb/magisk/magisk" ]; then
/data/adb/magisk/magisk -v 2>/dev/null || echo "unknown"
else
echo "unknown"
fi
;;
"kernelsu")
if [ -f "/system/bin/ksu" ]; then
ksu -v 2>/dev/null || echo "unknown"
else
echo "unknown"
fi
;;
"aptach")
if [ -f "/data/adb/aptach/aptach" ]; then
/data/adb/aptach/aptach --version 2>/dev/null || echo "unknown"
else
echo "unknown"
fi
;;
*)
echo "unknown"
;;
esac
}

reinject_magisk() {
log "重新注入Magisk Zygisk模块..."

if command -v magisk >/dev/null 2>&1; then
magisk --disable-module "$MODULE_ID"
sleep 1
magisk --enable-module "$MODULE_ID"
log "Magisk模块重新注入完成"
return 0
fi

local disable_file="/data/adb/modules/$MODULE_ID/disable"
if [ -f "$disable_file" ]; then
rm -f "$disable_file"
else
touch "$disable_file"
sleep 1
rm -f "$disable_file"
fi

setprop ctl.restart zygote
sleep 3

return 0
}

reinject_kernelsu() {
log "重新注入KernelSU模块..."

if command -v ksu >/dev/null 2>&1; then
ksu module disable "$MODULE_ID" 2>/dev/null
sleep 1
ksu module enable "$MODULE_ID" 2>/dev/null
log "KernelSU模块操作完成"
fi

setprop ctl.restart zygote
sleep 2

return 0
}

reinject_aptach() {
log "重新注入Aptach模块..."

if [ -f "/data/adb/aptach/aptach" ]; then
/data/adb/aptach/aptach module reload "$MODULE_ID" 2>/dev/null
sleep 2
log "Aptach模块重载完成"
fi

setprop ctl.restart zygote
sleep 2

return 0
}

reinject_module() {
local manager=$(detect_root_manager)
log "检测到Root管理器: $manager"

case $manager in
"magisk")
reinject_magisk
;;
"kernelsu")
reinject_kernelsu
;;
"aptach")
reinject_aptach
;;
*)
log "未知Root管理器，尝试通用方法..."
setprop ctl.restart zygote
sleep 3
;;
esac
}

check_injection_status() {
local manager=$(detect_root_manager)
log "检查$manager注入状态..."

case $manager in
"magisk")
if pgrep -f "magiskd" >/dev/null; then
log "Magisk运行正常"
return 0
else
log "Magisk未运行"
return 1
fi
;;
"kernelsu")
if pgrep -f "kernel_su" >/dev/null; then
log "KernelSU运行正常"
return 0
else
log "KernelSU未运行"
return 1
fi
;;
"aptach")
if pgrep -f "aptach" >/dev/null; then
log "Aptach运行正常"
return 0
else
log "Aptach未运行"
return 1
fi
;;
*)
log "未知Root管理器状态"
return 2
;;
esac
}

restart_sensor_services() {
log "停止sensorservice服务..."
stop sensorservice 2>/dev/null
sleep 1

log "启动sensorservice服务..."
start sensorservice 2>/dev/null
sleep 2

log "重启media和camera服务..."
stop media 2>/dev/null
stop camera 2>/dev/null
sleep 1
start media 2>/dev/null
start camera 2>/dev/null
}

check_sensor_status() {
if dumpsys sensorservice 2>/dev/null | grep -q "Active"; then
echo "✅ 陀螺仪传感器服务重启成功！"
return 0
else
echo "⚠️  传感器服务状态未知"
return 1
fi
}

main() {
log "模块目录: $MODDIR"

local manager=$(detect_root_manager)
local version=$(get_root_version "$manager")
log "Root管理器: $manager, 版本: $version"
log "用户: $(whoami), 时间: $(date)"

show_notification "🔄 正在重启陀螺仪传感器服务..."
show_notification "📱 检测到: ${manager} ${version}"

if ! check_injection_status; then
show_notification "⚠️  ${manager}注入异常，尝试修复..."
reinject_module
fi

restart_sensor_services

local sensor_status=$(check_sensor_status)
show_notification "$sensor_status"

reinject_module

log "所有操作完成"
show_notification "🔧 适配: Magisk/KernelSU/Aptach"

sleep 2
exit 0
}

main "$@"