package com.xyzshell.andinfo.libs

import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import android.provider.Settings
// import androidx.security.state.SecurityStateManagerCompat
import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
import java.util.Date
import java.util.Locale
import java.util.TimeZone

                            /**
 * 系统构建信息工具类
 * 提供 Android 系统构建版本、编译信息、安全补丁、JVM 信息等
 */
class BuildInfo(private val context: Context) {

    // private val securityStateManager = SecurityStateManagerCompat(context)
    // private val globalSecurityState = securityStateManager.getGlobalSecurityState()

    // ==================== 构建基本信息 ====================

    /**
     * 系统构建指纹
     * 格式: brand/product/device:version/id/incremental:type/tags
     * 示例: google/redfin/redfin:13/TP1A.220905.004/9012412:user/release-keys
     */
    val fingerprint: String
        get() = Build.FINGERPRINT

    /**
     * 品牌
     * 示例: "samsung", "google", "xiaomi"
     */
    val brand: String
        get() = Build.BRAND

    /**
     * 机型
     * 示例: "SM-G998B", "Pixel 6 Pro"
     */
    val model: String
        get() = Build.MODEL

    /**
     * 产品名称
     * 示例: "x1seea", "redfin"
     */
    val product: String
        get() = Build.PRODUCT

    /**
     * 设备代号
     * 示例: "p3s", "redfin"
     */
    val device: String
        get() = Build.DEVICE

    /**
     * 主板名称
     * 示例: "s5e9925"
     */
    val board: String
        get() = Build.BOARD

    /**
     * 制造商
     * 示例: "samsung", "Google"
     */
    val manufacturer: String
        get() = Build.MANUFACTURER

    /**
     * 硬件标识
     * 示例: "qcom", "exynos2200"
     */
    val hardware: String
        get() = Build.HARDWARE

    /**
     * 构建标签
     * 通常为 "release-keys" (正式版) 或 "test-keys" (测试版)
     */
    val tags: String
        get() = Build.TAGS

    /**
     * 构建类型
     * 通常为 "user" (用户版)、"userdebug" (调试版) 或 "eng" (工程版)
     */
    val type: String
        get() = Build.TYPE

    /**
     * 系统构建日期
     * 返回构建时的时间戳
     */
    val buildDate: Date
        get() = Date(Build.TIME)

    /**
     * 构建主机名
     * 编译系统的主机名
     */
    val host: String
        get() = Build.HOST

    /**
     * 构建用户
     * 执行编译的用户名
     */
    val user: String
        get() = Build.USER

    /**
     * 构建 ID
     * 构建的唯一标识符，通常是版本号
     * 示例: TP1A.220905.004
     */
    val id: String
        get() = Build.ID

    /**
     * 显示 ID
     * 用于向用户显示的构建标识符
     */
    val display: String
        get() = Build.DISPLAY

    // ==================== Android 版本信息 ====================

    /**
     * Android 版本号
     * 示例: "13", "12", "11" 等
     */
    val versionRelease: String
        get() = Build.VERSION.RELEASE

    /**
     * 版本代号
     * 开发阶段的代号，正式版通常为 "REL"
     */
    val versionCodename: String
        get() = Build.VERSION.CODENAME

    /**
     * SDK 版本号（API Level）
     * 示例: 33 (Android 13), 31 (Android 12), 30 (Android 11)
     */
    val versionSdkInt: Int
        get() = Build.VERSION.SDK_INT

    /**
     * 预览版 SDK 版本号
     * 如果是预览版返回非 0 值，正式版返回 0
     */
    val versionPreviewSdkInt: Int
        get() = Build.VERSION.PREVIEW_SDK_INT

    /**
     * 安全补丁级别
     * 格式: YYYY-MM-DD
     * 示例: "2023-12-05"
     */
    val securityPatch: String
        get() = Build.VERSION.SECURITY_PATCH

    /**
     * 基础操作系统
     * 通常为空，除非是基于其他版本构建
     */
    val baseOs: String
        get() = Build.VERSION.BASE_OS

    /**
     * 增量版本
     * 表示在同一版本号下的递增更新
     */
    val incremental: String
        get() = Build.VERSION.INCREMENTAL

    /**
     * 版本号或代号
     * Android 11+ 可用
     * 如果是正式版返回版本号，预览版返回代号
     */
    val releaseOrCodename: String?
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) Build.VERSION.RELEASE_OR_CODENAME else null

    /**
     * 媒体性能等级
     * Android 12+ 可用
     * 返回设备的媒体性能等级，0 表示未定义
     * 示例: 31 (Android 12), 33 (Android 13)
     */
    val mediaPerformanceClass: Int
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) Build.VERSION.MEDIA_PERFORMANCE_CLASS else 0

    /**
     * 版本显示字符串
     * Android 13+ 可用
     * 用于显示的完整版本号（包括预览版）
     */
    val releaseOrPreviewDisplay: String?
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) Build.VERSION.RELEASE_OR_PREVIEW_DISPLAY else null

    // ==================== RIL 和 CSC 信息 ====================

    /**
     * RIL 产品代码
     * Radio Interface Layer 产品代码（三星设备）
     * 示例: "SM-G998BZKDEUB"
     */
    val rilProductCode: String?
        get() = getSystemProperty("ro.ril.product_code")
            ?: getSystemProperty("ril.product_code")

    /**
     * RIL 官方 CSC 版本
     * CSC (Customer Service Code) 官方版本（三星设备）
     * 示例: "G998BXXU4CWE1"
     */
    val rilOfficialCscver: String?
        get() = getSystemProperty("ro.ril.official_cscver")
            ?: getSystemProperty("ril.official_cscver")

    /**
     * CSC 销售代码
     * 表示设备的销售地区/运营商代码（三星设备）
     * 示例: "XEU" (欧洲未锁定), "ATT" (AT&T), "TMB" (T-Mobile)
     */
    val cscSalesCode: String?
        get() = getSystemProperty("ro.csc.sales_code")
            ?: getSystemProperty("ril.sales_code")
            ?: getSystemProperty("persist.sys.omc_etcpath")?.substringAfterLast("/")

    /**
     * 国家/地区 ISO 代码
     * 小写 ISO 标准代码，世界版本为 "zz"
     * 示例: "us", "cn", "kr", "zz"
     */
    val countryISO: String?
        get() {
            // 尝试多个来源获取国家代码
            val country = getSystemProperty("ro.product.locale.region")
                ?: getSystemProperty("persist.sys.country")
                ?: getSystemProperty("ro.product.country")
                ?: Locale.getDefault().country

            return country?.lowercase()?.takeIf { it.isNotEmpty() }
        }

    // ==================== 设备类型 ====================

    /**
     * 设备外形因素/类型
     * 判断设备是手机(Phone)还是平板(Tablet)
     * @return "Phone", "Tablet" 或 "Unknown"
     */
    val formFactor: String
        get() {
            // 检查系统属性
            val deviceType = getSystemProperty("ro.build.characteristics")
            if (deviceType != null) {
                return when {
                    deviceType.contains("tablet", ignoreCase = true) -> "Tablet"
                    deviceType.contains("phone", ignoreCase = true) -> "Phone"
                    else -> deviceType
                }
            }

            // 通过 PackageManager 特性判断
            val packageManager = context.packageManager
            return when {
                // 检查是否有电话功能（手机的标志）
                packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) -> {
                    // 有电话功能，但还要检查屏幕尺寸
                    val config = context.resources.configuration
                    val screenLayout = config.screenLayout and android.content.res.Configuration.SCREENLAYOUT_SIZE_MASK
                    // 大屏幕且有电话功能可能是平板带电话（如某些三星平板）
                    if (screenLayout >= android.content.res.Configuration.SCREENLAYOUT_SIZE_XLARGE) {
                        "Tablet"
                    } else {
                        "Phone"
                    }
                }
                // 没有电话功能，通过屏幕尺寸判断
                else -> {
                    val config = context.resources.configuration
                    val screenLayout = config.screenLayout and android.content.res.Configuration.SCREENLAYOUT_SIZE_MASK
                    when {
                        screenLayout >= android.content.res.Configuration.SCREENLAYOUT_SIZE_LARGE -> "Tablet"
                        else -> "Unknown"
                    }
                }
            }
        }


    /**
     * 是否为平板设备
     */
    val isTablet: Boolean
        get() = formFactor == "Tablet"

    /**
     * 是否为手机设备
     */
    val isPhone: Boolean
        get() = formFactor == "Phone"

    // ==================== JVM 信息 ====================

    /**
     * JVM 名称
     * 示例: "Dalvik" (Android) 或 "Java HotSpot(TM) 64-Bit Server VM"
     */
    val jvmName: String?
        get() = System.getProperty("java.vm.name")

    /**
     * JVM 供应商
     * 示例: "The Android Project" 或 "Oracle Corporation"
     */
    val jvmVendor: String?
        get() = System.getProperty("java.vm.vendor")

    /**
     * JVM 版本
     * 示例: "2.1.0"
     */
    val jvmVersion: String?
        get() = System.getProperty("java.vm.version")

    /**
     * Java 类版本
     * 示例: "50.0" (Java 6), "52.0" (Java 8)
     */
    val jvmClassVersion: String?
        get() = System.getProperty("java.class.version")

    /**
     * Java 规范名称
     * 示例: "Dalvik Core Library"
     */
    val jvmSpecificationName: String?
        get() = System.getProperty("java.specification.name")

    /**
     * Java 规范供应商
     * 示例: "The Android Project"
     */
    val jvmSpecificationVendor: String?
        get() = System.getProperty("java.specification.vendor")

    /**
     * Java 规范版本
     * 示例: "0.9"
     */
    val jvmSpecificationVersion: String?
        get() = System.getProperty("java.specification.version")

    // ==================== 安全与内核信息 ====================

    /**
     * 厂商安全补丁级别
     * 需要 SecurityStateManagerCompat 支持
     * 某些设备可能有额外的厂商安全补丁
     */
    val vendorSecurityPatchLevel: String?
        get() = null // globalSecurityState.getString(SecurityStateManagerCompat.KEY_VENDOR_SPL)


    /**
     * 完整内核版本
     * 包含内核版本和编译信息
     * 示例: "5.10.157-android13-4-00001-gf0123456789a-ab9876543"
     */
    val kernelCompleteVersion: String?
        get() = System.getProperty("os.version")

    /**
     * Bootloader 版本
     * 设备的引导加载程序版本
     */
    val bootloaderVersion: String
        get() = Build.BOOTLOADER

    /**
     * 基带版本（无线电版本）
     * 移动网络基带固件版本
     */
    val radioVersion: String?
        get() = Build.getRadioVersion()

    // ==================== 分区信息 ====================

    /**
     * 指纹分区信息列表
     * Android 10+ 可用
     * 包含系统各分区的名称和指纹信息
     *
     * 常见分区：
     * - system: 系统分区
     * - vendor: 厂商分区
     * - product: 产品分区
     * - odm: ODM（原始设计制造商）分区
     * - system_ext: 系统扩展分区
     */
    val fingerprintedPartitions: List<PartitionInfo>
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Build.getFingerprintedPartitions().map { PartitionInfo(it.name, it.fingerprint) }
        } else {
            emptyList()
        }

    /**
     * 分区信息数据类
     * @property name 分区名称
     * @property fingerprint 分区指纹（构建标识）
     */
    data class PartitionInfo(val name: String, val fingerprint: String)

    // ==================== Treble 和系统更新 ====================

    /**
     * 是否支持 Treble
     * Android 8.0+ 引入的项目，将供应商实现与 Android OS 框架分离
     * 通过检查 ro.treble.enabled 属性判断
     */
    val isTrebleEnabled: Boolean
        get() = getSystemProperty("ro.treble.enabled") == "true"

    /**
     * Treble 版本
     * 返回 Treble 的版本号
     */
    val trebleVersion: String?
        get() = getSystemProperty("ro.treble.version")

    /**
     * 是否支持无缝更新（A/B 系统更新）
     * Android 7.0+ 可用
     * 允许在后台安装更新，重启后即可使用新版本
     */
    val isSeamlessUpdateSupported: Boolean
        get() = getSystemProperty("ro.build.ab_update") == "true"

    /**
     * 当前活动插槽
     * A/B 系统分区中当前活动的插槽（slot_a 或 slot_b）
     * 仅在支持 A/B 更新的设备上有效
     */
    val currentSlot: String?
        get() = getSystemProperty("ro.boot.slot_suffix")?.removePrefix("_")

    /**
     * 虚拟 A/B 支持
     * Android 11+ 的新功能，使用动态分区实现 A/B 更新
     */
    val isVirtualABEnabled: Boolean
        get() = getSystemProperty("ro.virtual_ab.enabled") == "true"

    // ==================== Root 权限和安全 ====================

    /**
     * 检查设备是否已 Root
     * 通过多种方法检测 Root 状态
     */
    val isRooted: Boolean
        get() = checkRootAccess()

    /**
     * Root 检测方法
     * 检查常见的 Root 工具和文件
     */
    private fun checkRootAccess(): Boolean {
        // 检查常见的 Root 二进制文件
        val rootPaths = arrayOf(
            "/system/app/Superuser.apk",
            "/sbin/su",
            "/system/bin/su",
            "/system/xbin/su",
            "/data/local/xbin/su",
            "/data/local/bin/su",
            "/system/sd/xbin/su",
            "/system/bin/failsafe/su",
            "/data/local/su",
            "/su/bin/su"
        )

        for (path in rootPaths) {
            if (File(path).exists()) {
                return true
            }
        }

        // 尝试执行 su 命令
        return try {
            Runtime.getRuntime().exec(arrayOf("/system/xbin/which", "su"))
            true
        } catch (_: Exception) {
            false
        }
    }

    /**
     * SELinux 状态
     * 返回 SELinux 的当前模式：Enforcing、Permissive 或 Disabled
     */
    val seLinuxStatus: String
        get() = getSystemProperty("ro.build.selinux") ?: "Unknown"

    /**
     * 是否启用 dm-verity
     * 验证系统分区完整性的内核功能
     */
    val isDmVerityEnabled: Boolean
        get() = getSystemProperty("ro.boot.veritymode") == "enforcing"

    // ==================== Google Play 服务 ====================

    /**
     * Google Play 服务版本名称
     * 示例: "23.45.12 (190400-582679489)"
     */
    val googlePlayServicesVersion: String?
        get() = getPackageVersion("com.google.android.gms")

    /**
     * Google Play 服务版本代码
     */
    val googlePlayServicesVersionCode: Long?
        get() = getPackageVersionCode("com.google.android.gms")

    /**
     * Google Play Store 版本
     */
    val googlePlayStoreVersion: String?
        get() = getPackageVersion("com.android.vending")

    /**
     * Google Services Framework 版本
     */
    val googleServicesFrameworkVersion: String?
        get() = getPackageVersion("com.google.android.gsf")

    /**
     * 获取包版本名称
     */
    private fun getPackageVersion(packageName: String): String? {
        return try {
            val packageInfo = context.packageManager.getPackageInfo(packageName, 0)
            packageInfo.versionName
        } catch (_: PackageManager.NameNotFoundException) {
            null
        }
    }

    /**
     * 获取包版本代码
     */
    private fun getPackageVersionCode(packageName: String): Long? {
        return try {
            val packageInfo = context.packageManager.getPackageInfo(packageName, 0)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                packageInfo.longVersionCode
            } else {
                @Suppress("DEPRECATION")
                packageInfo.versionCode.toLong()
            }
        } catch (_: PackageManager.NameNotFoundException) {
            null
        }
    }

    // ==================== Toybox 和工具版本 ====================

    /**
     * Toybox 版本
     * Toybox 是 Android 的 Unix 命令行工具集合
     */
    val toyboxVersion: String?
        get() = executeCommand("toybox --version")?.trim()

    /**
     * Toolbox 版本（旧版 Android 使用）
     */
    val toolboxVersion: String?
        get() = executeCommand("toolbox --version")?.trim()

    /**
     * BusyBox 版本（如果安装）
     */
    val busyboxVersion: String?
        get() = executeCommand("busybox --version")?.split("\n")?.firstOrNull()?.trim()

    // ==================== SSL/TLS 信息 ====================

    /**
     * OpenSSL 版本
     * 示例: "OpenSSL 1.1.1t  7 Feb 2023"
     */
    val openSslVersion: String?
        get() = executeCommand("openssl version")?.trim()

    /**
     * BoringSSL 版本信息
     * Android 使用 Google 的 BoringSSL
     */
    val boringSslVersion: String?
        get() = getSystemProperty("ro.build.version.boringssl")

    /**
     * TLS 版本支持
     * 从系统属性获取支持的 TLS 版本
     */
    val tlsVersion: String?
        get() = try {
            javax.net.ssl.SSLContext.getDefault().supportedSSLParameters.protocols.joinToString(", ")
        } catch (_: Exception) {
            null
        }

    // ==================== 语言和时区 ====================

    /**
     * 系统语言
     * 示例: "中文(简体)", "English"
     */
    val systemLanguage: String
        get() = Locale.getDefault().displayLanguage

    /**
     * 语言代码
     * 示例: "zh", "en"
     */
    val languageCode: String
        get() = Locale.getDefault().language

    /**
     * 国家/地区
     * 示例: "中国", "United States"
     */
    val country: String
        get() = Locale.getDefault().displayCountry

    /**
     * 国家/地区代码
     * 示例: "CN", "US"
     */
    val countryCode: String
        get() = Locale.getDefault().country

    /**
     * 系统时区
     * 示例: "Asia/Shanghai", "America/New_York"
     */
    val timeZone: String
        get() = TimeZone.getDefault().id

    /**
     * 时区显示名称
     * 示例: "中国标准时间", "Eastern Standard Time"
     */
    val timeZoneDisplayName: String
        get() = TimeZone.getDefault().displayName

    /**
     * UTC 偏移（毫秒）
     */
    val timeZoneOffset: Int
        get() = TimeZone.getDefault().rawOffset

    // ==================== 开发者选项和调试 ====================

    /**
     * USB 调试是否启用
     * 需要在开发者选项中开启
     */
    val isUsbDebuggingEnabled: Boolean
        get() = Settings.Global.getInt(context.contentResolver, Settings.Global.ADB_ENABLED, 0) == 1

    /**
     * 开发者选项是否启用
     */
    val isDevelopmentSettingsEnabled: Boolean
        get() = Settings.Global.getInt(
            context.contentResolver,
            Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
            0
        ) == 1

    /**
     * 是否允许未知来源安装
     * Android 8.0+ 改为针对每个应用
     */
    val isUnknownSourcesEnabled: Boolean
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.packageManager.canRequestPackageInstalls()
        } else {
            @Suppress("DEPRECATION")
            Settings.Secure.getInt(context.contentResolver, Settings.Secure.INSTALL_NON_MARKET_APPS, 0) == 1
        }

    // ==================== 内核信息 ====================

    /**
     * 内核版本号
     * 示例: "5.10.157"
     */
    val kernelVersion: String?
        get() = kernelCompleteVersion?.split("-")?.firstOrNull()

    /**
     * 内核架构
     * 示例: "aarch64", "x86_64"
     */
    val kernelArchitecture: String?
        get() = System.getProperty("os.arch")

    /**
     * 内核名称
     * 通常为 "Linux"
     */
    val kernelName: String?
        get() = System.getProperty("os.name")

    /**
     * 命令行参数
     * 内核启动时的命令行参数
     */
    val kernelCommandLine: String?
        get() = readFile("/proc/cmdline")

    /**
     * CPU 信息（从 /proc/cpuinfo）
     */
    val procCpuInfo: String?
        get() = readFile("/proc/cpuinfo")

    /**
     * 内存信息（从 /proc/meminfo）
     */
    val procMemInfo: String?
        get() = readFile("/proc/meminfo")

    // ==================== 设备标识符 ====================

    /**
     * Android ID
     * 64位十六进制字符串，设备首次启动时随机生成
     * 出厂重置后会改变
     */
    val androidId: String
        get() = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID) ?: "unknown"

    /**
     * 构建序列号
     * Android 8.0+ 需要 READ_PHONE_STATE 权限
     */
    val serialNumber: String
        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            try {
                @Suppress("MissingPermission", "HardwareIds")
                Build.getSerial()
            } catch (_: SecurityException) {
                "需要权限"
            }
        } else {
            @Suppress("DEPRECATION", "HardwareIds")
            Build.SERIAL
        }

    /**
     * 设备唯一标识符（基于多个参数生成）
     */
    val deviceUniqueId: String
        get() = "${Build.BOARD}:${Build.BRAND}:${Build.DEVICE}:${androidId}".hashCode().toString()

    // ==================== 辅助方法 ====================

    /**
     * 获取系统属性
     * 使用反射调用 SystemProperties.get()
     */
    private fun getSystemProperty(key: String): String? {
        return try {
            @Suppress("PrivateApi")
            val systemProperties = Class.forName("android.os.SystemProperties")
            val method = systemProperties.getMethod("get", String::class.java)
            method.invoke(null, key) as? String
        } catch (_: Exception) {
            null
        }
    }

    /**
     * 执行 shell 命令并返回输出
     */
    private fun executeCommand(command: String): String? {
        return try {
            val process = Runtime.getRuntime().exec(command)
            val reader = BufferedReader(InputStreamReader(process.inputStream))
            val output = reader.readText()
            process.waitFor()
            reader.close()
            output.takeIf { it.isNotEmpty() }
        } catch (_: Exception) {
            null
        }
    }

    /**
     * 读取文件内容
     */
    private fun readFile(path: String): String? {
        return try {
            File(path).readText().trim()
        } catch (_: Exception) {
            null
        }
    }


    // ==================== 辅助方法 ====================

    /**
     * 获取文本格式的构建信息摘要
     * @return 格式化的文本信息
     */
    fun text(): String {
        val sb = StringBuilder()

        // 基本构建信息
        sb.append("=== 系统构建信息 ===\n")
        sb.append("指纹: $fingerprint\n")
        sb.append("品牌: $brand\n")
        sb.append("机型: $model\n")
        sb.append("产品: $product\n")
        sb.append("设备代号: $device\n")
        sb.append("主板: $board\n")
        sb.append("制造商: $manufacturer\n")
        sb.append("硬件: $hardware\n")
        sb.append("设备类型: $formFactor\n")
        sb.append("显示ID: $display\n")
        sb.append("构建ID: $id\n")
        sb.append("类型: $type\n")
        sb.append("标签: $tags\n")
        sb.append("构建日期: $buildDate\n")
        sb.append("构建用户: $user\n")
        sb.append("构建主机: $host\n")

        // RIL 和 CSC 信息（主要用于三星设备）
        if (rilProductCode != null || rilOfficialCscver != null || cscSalesCode != null) {
            sb.append("\n=== RIL/CSC 信息 ===\n")
            rilProductCode?.let { sb.append("RIL产品代码: $it\n") }
            rilOfficialCscver?.let { sb.append("RIL官方CSC版本: $it\n") }
            cscSalesCode?.let { sb.append("CSC销售代码: $it\n") }
            countryISO?.let { sb.append("国家/地区ISO: $it\n") }
        }

        // Android 版本信息
        sb.append("\n=== Android 版本 ===\n")
        sb.append("版本号: $versionRelease\n")
        sb.append("SDK版本: $versionSdkInt\n")
        sb.append("代号: $versionCodename\n")
        sb.append("增量版本: $incremental\n")
        sb.append("安全补丁: $securityPatch\n")
        releaseOrCodename?.let { sb.append("版本/代号: $it\n") }
        if (mediaPerformanceClass > 0) {
            sb.append("媒体性能等级: $mediaPerformanceClass\n")
        }
        releaseOrPreviewDisplay?.let { sb.append("版本显示: $it\n") }
        if (baseOs.isNotEmpty()) {
            sb.append("基础OS: $baseOs\n")
        }

        // Treble 和系统更新
        sb.append("\n=== Treble 和系统更新 ===\n")
        sb.append("Treble支持: ${if (isTrebleEnabled) "是" else "否"}\n")
        trebleVersion?.let { sb.append("Treble版本: $it\n") }
        sb.append("无缝更新(A/B): ${if (isSeamlessUpdateSupported) "是" else "否"}\n")
        currentSlot?.let { sb.append("当前活动插槽: $it\n") }
        sb.append("虚拟A/B: ${if (isVirtualABEnabled) "是" else "否"}\n")

        // Root 和安全
        sb.append("\n=== Root 和安全 ===\n")
        sb.append("Root状态: ${if (isRooted) "已Root" else "未Root"}\n")
        sb.append("SELinux状态: $seLinuxStatus\n")
        sb.append("dm-verity: ${if (isDmVerityEnabled) "启用" else "禁用"}\n")

        // Google 服务
        sb.append("\n=== Google 服务 ===\n")
        googlePlayServicesVersion?.let { sb.append("Play服务版本: $it\n") }
        googlePlayServicesVersionCode?.let { sb.append("Play服务版本代码: $it\n") }
        googlePlayStoreVersion?.let { sb.append("Play商店版本: $it\n") }
        googleServicesFrameworkVersion?.let { sb.append("GSF版本: $it\n") }

        // 工具版本
        sb.append("\n=== 系统工具 ===\n")
        toyboxVersion?.let { sb.append("Toybox: $it\n") }
        toolboxVersion?.let { sb.append("Toolbox: $it\n") }
        busyboxVersion?.let { sb.append("BusyBox: $it\n") }

        // SSL/TLS
        sb.append("\n=== SSL/TLS ===\n")
        openSslVersion?.let { sb.append("OpenSSL: $it\n") }
        boringSslVersion?.let { sb.append("BoringSSL: $it\n") }
        tlsVersion?.let { sb.append("TLS支持: $it\n") }

        // 语言和时区
        sb.append("\n=== 语言和时区 ===\n")
        sb.append("系统语言: $systemLanguage ($languageCode)\n")
        sb.append("国家/地区: $country ($countryCode)\n")
        sb.append("时区: $timeZone\n")
        sb.append("时区显示: $timeZoneDisplayName\n")
        sb.append("UTC偏移: ${timeZoneOffset / 3600000}小时\n")

        // 开发者选项
        sb.append("\n=== 开发者选项 ===\n")
        sb.append("USB调试: ${if (isUsbDebuggingEnabled) "启用" else "禁用"}\n")
        sb.append("开发者选项: ${if (isDevelopmentSettingsEnabled) "启用" else "禁用"}\n")
        sb.append("未知来源: ${if (isUnknownSourcesEnabled) "允许" else "禁止"}\n")

        // JVM 信息
        sb.append("\n=== JVM 信息 ===\n")
        jvmName?.let { sb.append("JVM名称: $it\n") }
        jvmVendor?.let { sb.append("JVM供应商: $it\n") }
        jvmVersion?.let { sb.append("JVM版本: $it\n") }
        jvmClassVersion?.let { sb.append("类版本: $it\n") }
        jvmSpecificationName?.let { sb.append("规范名称: $it\n") }
        jvmSpecificationVersion?.let { sb.append("规范版本: $it\n") }

        // 内核信息
        sb.append("\n=== 内核信息 ===\n")
        kernelName?.let { sb.append("内核名称: $it\n") }
        kernelVersion?.let { sb.append("内核版本: $it\n") }
        kernelArchitecture?.let { sb.append("内核架构: $it\n") }
        kernelCompleteVersion?.let { sb.append("完整版本: $it\n") }

        // 硬件信息
        sb.append("\n=== 硬件信息 ===\n")
        sb.append("Bootloader: $bootloaderVersion\n")
        radioVersion?.let { sb.append("基带版本: $it\n") }

        // 设备标识符
        sb.append("\n=== 设备标识符 ===\n")
        sb.append("Android ID: $androidId\n")
        sb.append("序列号: $serialNumber\n")
        sb.append("设备唯一ID: $deviceUniqueId\n")

        // 分区信息
        if (fingerprintedPartitions.isNotEmpty()) {
            sb.append("\n=== 分区指纹 ===\n")
            fingerprintedPartitions.forEach { partition ->
                sb.append("${partition.name}: ${partition.fingerprint}\n")
            }
        }

        return sb.toString()
    }
}
