package com.ydl.component.service.web

import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
import com.tencent.smtt.sdk.WebView
import com.ydl.confide.home.event.ConfideDialogEvent
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydlcommon.base.BaseActivityMgr
import com.ydl.ydlcommon.ui.Loading
import com.yidianling.common.tools.ToastUtil
import de.greenrobot.event.EventBus


class JsMethod(private val webView: WebView?) {


    fun handle(param: String): Boolean {
        try {
            val obj = JsonParser().parse(param).asJsonObject
            val cmd = obj.getAsJsonObject("cmd")
            val actionName = cmd?.getAsJsonPrimitive("action_name")?.asString
            if (actionName.isNullOrBlank()) return false
            return innerHandle(actionName, cmd)
        } catch (throwable: Throwable) {
            throwable.printStackTrace()
            return false
        }
    }

    private fun innerHandle(actionName: String, obj: JsonObject): Boolean {
        val param = obj.getAsJsonObject("params")
        when (actionName) {
            "handle_confide_btn" -> {
                val show = param.getAsJsonPrimitive("show").asInt
                EventBus.getDefault().post(ConfideDialogEvent(show))
                return true
            }
            "show_loading" -> {
                val topActivity = BaseActivityMgr.INST.getTopActivity()
                Loading.show(topActivity)
                return true
            }
            "close_loading" -> {
                Loading.close()
                return true
            }
            "open_app_eval_list"->{
                val url = param.getAsJsonPrimitive("url").asString
                val topActivity = BaseActivityMgr.INST.getTopActivity()
                NewH5Activity.start(topActivity, H5Params(url, ""))
                return true
            }
            "toast" -> {
                val msg = param.getAsJsonPrimitive("msg").asString
                if (!msg.isNullOrBlank()) {
                    ToastUtil.toastShort(msg)
                }
                return true
            }
            "has_audio_permission" -> {
                val callback = param.getAsJsonPrimitive("callback").asString
                if (callback.isNullOrBlank()) return true
                val topActivity = BaseActivityMgr.INST.getTopActivity()
                val grantedPermission = XXPermissions.isGrantedPermission(topActivity, Permission.RECORD_AUDIO)
                webView?.loadUrl("javascript:$callback(${if (grantedPermission) 1 else 0})")
                return true
            }
            else -> {
                return false
            }
        }
    }
}