package com.gh.gamecenter.plugin.transform

import javassist.ClassPool
import javassist.CtClass
import javassist.NotFoundException
import javassist.bytecode.ClassFile
import java.io.BufferedInputStream
import java.io.DataInputStream
import java.io.InputStream

class MiniGameWebViewTransformer : Transformer {

    private val classPool = ClassPool.getDefault()

    override fun getModifyClassName(): String {
        return "QUAUtil"
    }

    override fun modifyClass(filePath: String, inputStream: InputStream): CtClass? {
        if (filePath.contains(getModifyClassName())) {

            println("发现 QUAUtil")

            val classFile = ClassFile(DataInputStream(BufferedInputStream(inputStream)))
            val ctClass = classPool.get(classFile.name)

            if (ctClass.isFrozen) {
                ctClass.defrost()
            }

            // 使用 try catch 包裹找到的第一个 getSystemUA 方法 （若能找到的话）
            try {
                val ctMethod = ctClass.getDeclaredMethod("getSystemUA")
                val body = "{ if (systemUA != null) { return systemUA; } systemUA = java.net.URLEncoder.encode(System.getProperty(\"http.agent\"), \"UTF-8\"); return systemUA; }"
                ctMethod.setBody(body)

                println("修改 getSystemUA 方法")
            } catch (e: NotFoundException) {
                e.printStackTrace()
            }

            return ctClass
        }
        return null
    }

}