#!/system/bin/sh

# TTKernel Pro - 阿念
# Telegram: @TTGWNB

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 "💫 感谢使用阿念の陀螺仪模块"
    show_notification "📞 技术支持: @TTGWNB"
    show_notification "🔧 适配: Magisk/KernelSU/Aptach"
    
    sleep 2
    exit 0
}

main "$@"