package com.zxhl.cms.common

import android.content.Intent
import android.net.Uri
import android.net.http.SslError
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.webkit.*
import androidx.appcompat.app.AppCompatActivity
import com.zxhl.cms.R
import com.zxhl.cms.utils.EventUtils
import kotlinx.android.synthetic.main.activity_h5.*


class H5Activity : AppCompatActivity() {
    var mWebView: WebView? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_h5)
        initData()
    }

    private fun initData() {
        id_activity_web_toolbar?.setNavigationOnClickListener { finish() }
        val url = intent?.data?.getQueryParameter("url") ?: ""
        mWebView = findViewById(R.id.id_activity_web_view)
        id_activity_web_view?.loadUrl(url)
        initWebView()
    }

    fun initWebView() {
        val webSettings = mWebView!!.getSettings()
        //如果访问的页面中要与Javascript交互，则webview必须设置支持Javascript
        webSettings.javaScriptEnabled = true
        // 若加载的 html 里有JS 在执行动画等操作，会造成资源浪费（CPU、电量）
        // 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可

        //设置自适应屏幕，两者合用
        webSettings.useWideViewPort = true //将图片调整到适合webview的大小
        webSettings.loadWithOverviewMode = true // 缩放至屏幕的大小

        //缩放操作
        webSettings.setSupportZoom(true) //支持缩放，默认为true。是下面那个的前提。
        webSettings.builtInZoomControls = true //设置内置的缩放控件。若为false，则该WebView不可缩放
        webSettings.displayZoomControls = false //隐藏原生的缩放控件

        //其他细节操作
        webSettings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK //关闭webview中缓存
        webSettings.allowFileAccess = true //设置可以访问文件
        webSettings.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
        webSettings.loadsImagesAutomatically = true //支持自动加载图片
        webSettings.defaultTextEncodingName = "utf-8" //设置编码格式
        webSettings.domStorageEnabled = true
        mWebView?.setWebChromeClient(object : WebChromeClient() {

            override fun onJsAlert(
                view: WebView?,
                url: String?,
                message: String?,
                result: JsResult
            ): Boolean {
                result.confirm()
                return true
            }

            override fun onPermissionRequest(request: PermissionRequest) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    request.grant(request.resources)
                    request.origin
                }
            }

            override fun onProgressChanged(view: WebView?, newProgress: Int) {
                super.onProgressChanged(view, newProgress)
                if (newProgress == 100) {
                    id_webview_progress_view.visibility = View.GONE
                } else {
                    id_webview_progress_view.visibility = View.VISIBLE
                    id_webview_progress_view.progress = newProgress
                }
            }
        })
        mWebView?.setWebViewClient(object : WebViewClient() {

            override fun shouldOverrideUrlLoading(wv: WebView, url: String): Boolean {
                Log.e("MXL", "URL" + url)
                if (url == null) return false
                try {
                    if (url.startsWith("weixin://") //微信
                        || url.startsWith("alipays://") //支付宝
                        || url.startsWith("mailto://") //邮件
                        || url.startsWith("tel://") //电话
                        || url.startsWith("dianping://") //大众点评
                        || url.startsWith("tbopen://") //淘宝
                        || url.startsWith("openapp.jdmobile://") //淘宝
                        || url.startsWith("tmast://") //淘宝
                        || url.startsWith("pinduoduo://") //拼多多
                        || url.startsWith("imeituan://") //美团
                    //其他自定义的scheme
                    ) {
                        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                        startActivity(intent)
                        return true
                    }
                } catch (e: Exception) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
                    return true //没有安装该app时，返回true，表示拦截自定义链接，但不跳转，避免弹出上面的错误页面
                }

                //处理http和https开头的url
//                wv.loadUrl(url)
                return false
            }

            override fun onReceivedSslError(
                view: WebView,
                handler: SslErrorHandler,
                error: SslError
            ) {
                handler.proceed()
            }

            override fun onReceivedError(
                view: WebView?,
                request: WebResourceRequest?,
                error: WebResourceError?
            ) {
                super.onReceivedError(view, request, error)
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                    Log.d("wxw", "1error${error?.errorCode}")
                    Log.d("wxw", "2error${error?.description}")
                } else {
                }
            }
        })
    }

    var firstLoad: Boolean = false
    override fun onPause() {
        super.onPause()
        firstLoad = true
    }

    override fun onResume() {
        super.onResume()
        if (firstLoad) {
            //从支付宝回来
            Log.e("MXL", "从支付宝回来")
            finish()
        }
    }
}