/*
 * ********************************************************************************************************************
 *
 *               iFHS7.
 *              ;BBMBMBMc                  rZMBMBR              BMB
 *              MBEr:;PBM,               7MBMMEOBB:             BBB                       RBW
 *     XK:      BO     SB.     :SZ       MBM.       c;;     ir  BBM :FFr       :SSF:    ;xBMB:r   iuGXv.    i:. iF2;
 *     DBBM0r.  :D     S7   ;XMBMB       GMBMu.     MBM:   BMB  MBMBBBMBMS   WMBMBMBBK  MBMBMBM  BMBRBMBW  .MBMBMBMBB
 *      :JMRMMD  ..    ,  1MMRM1;         ;MBMBBR:   MBM  ;MB:  BMB:   MBM. RMBr   sBMH   BM0         UMB,  BMB.  KMBv
 *     ;.   XOW  B1; :uM: 1RE,   i           .2BMBs  rMB. MBO   MBO    JMB; MBB     MBM   BBS    7MBMBOBM:  MBW   :BMc
 *     OBRJ.SEE  MRDOWOR, 3DE:7OBM       .     ;BMB   RMR7BM    BMB    MBB. BMB    ,BMR  .BBZ   MMB   rMB,  BMM   rMB7
 *     :FBRO0D0  RKXSXPR. JOKOOMPi       BMBSSWBMB;    BMBB:    MBMB0ZMBMS  .BMBOXRBMB    MBMDE RBM2;SMBM;  MBB   xBM2
 *         iZGE  O0SHSPO. uGZ7.          sBMBMBDL      :BMO     OZu:BMBK,     rRBMB0;     ,EBMB  xBMBr:ER.  RDU   :OO;
 *     ,BZ, 1D0  RPSFHXR. xWZ .SMr                  . .BBB
 *      :0BMRDG  RESSSKR. 2WOMBW;                   BMBMR
 *         i0BM: SWKHKGO  MBDv
 *           .UB  OOGDM. MK,                                          Copyright (c) 2015-2019.  斯伯坦机器人
 *              ,  XMW  ..
 *                  r                                                                     All rights reserved.
 *
 * ********************************************************************************************************************
 */

package com.sybotan.android.views.webview

import android.graphics.Bitmap
import android.webkit.*
import android.widget.EditText
import com.sybotan.views.R
import org.jetbrains.anko.*

/**
 * @author  庞利祥(sybotan@126.com)
 */
open class SWebChromeClient : WebChromeClient() {
    /**
     * 类对象
     */
    companion object {
        private val TAG = SWebChromeClient::class.java.name
    } // companion object

    /**
     * 获取网页的加载进度
     *
     * @param   view        WebView视图
     * @param   newProgress
     */
    override fun onProgressChanged(view: WebView, newProgress: Int) {
        super.onProgressChanged(view, newProgress)
        return
    } // Function onProgressChanged()

    /**
     * 获取网页的title，可以设置在当前webview上
     *
     * @param   view        WebView视图
     * @param   title       网页标题
     */
    override fun onReceivedTitle(view: WebView, title: String?) {
        super.onReceivedTitle(view, title)
        return
    } // Function onReceivedTitle()

    /**
     * 获取网页的图标
     *
     * @param   view        WebView视图
     * @param   icon        网页图标
     */
    override fun onReceivedIcon(view: WebView, icon: Bitmap?) {
        super.onReceivedIcon(view, icon)
        return
    } // Function onReceivedIcon()

    /**
     * 实现js的alert弹窗
     *
     * @param   view        WebView视图
     * @param   url         页面的url地址
     * @param   message     消息
     * @param   result      返回结果
     * @return  返回true表示处理了该弹窗。
     */
    override fun onJsAlert(view: WebView, url: String, message: String, result: JsResult): Boolean {
        view.context.alert(message) {
            isCancelable = false
            titleResource = R.string.app_name
            iconResource = android.R.drawable.ic_dialog_alert
            positiveButton(R.string.btn_ok){
                // 注意:因为没有绑定事件，需要强行confirm,否则页面会变黑显示不了内容。
                result.confirm()
            }
            // 屏蔽返回按键
            onKeyPressed { _, _, _ ->
                true
            }
        }.show()

        return true
    } // Function onJsAlert()

    /**
     * 实现js的confirm弹窗
     *
     * @param   view        WebView视图
     * @param   url         页面的url地址
     * @param   message     消息
     * @param   result      返回结果
     * @return  返回true表示处理了该弹窗。
     */
    override fun onJsConfirm(view: WebView, url: String, message: String, result: JsResult): Boolean {
        view.context.alert(message) {
            isCancelable = false
            titleResource = R.string.app_name
            iconResource = android.R.drawable.ic_dialog_alert
            positiveButton(R.string.btn_ok){
                // 注意:因为没有绑定事件，需要强行confirm,否则页面会变黑显示不了内容。
                result.confirm()
            }
            negativeButton(R.string.btn_cancel) {
                result.cancel()
            }
            // 屏蔽返回按键
            onKeyPressed { _, _, _ ->
                true
            }
            onCancelled {
                result.cancel()
            }
        }.show()
        return true
    } // Function onJsConfirm()

    /**
     * 实现js的prompt弹窗
     *
     * @param   view        WebView视图
     * @param   url         页面的url地址
     * @param   message     消息
     * @param   result      返回结果
     * @return  返回true表示处理了该弹窗。
     */
    override fun onJsPrompt(view: WebView, url: String, message: String, defaultValue: String, result: JsPromptResult): Boolean {
        var editPrompt : EditText? = null
        view.context.alert(message) {
            isCancelable = false
            titleResource = R.string.app_name
            iconResource = android.R.drawable.ic_dialog_alert
            positiveButton(R.string.btn_ok) {
                // 注意:因为没有绑定事件，需要强行confirm,否则页面会变黑显示不了内容。
                result.confirm(editPrompt?.text.toString())
            }
            negativeButton(R.string.btn_cancel) {
                result.cancel()
            }
            // 屏蔽返回按键
            onKeyPressed { _, _, _ ->
                true
            }
            onCancelled {
                result.cancel()
            }
            customView {
                verticalLayout {
                    editPrompt = editText(defaultValue) { }
                }
            }
        }.show()
        return true
    } // Function onJsPrompt()
} // Class SWebChromeClient

