package com.ydl.confide.home.event

import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.text.TextUtils
import android.view.MotionEvent
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.tencent.smtt.sdk.WebSettings
import com.ydl.confide.R
import com.ydl.confide.home.ConfideHomeActivity
import com.ydl.confide.home.adapter.ConfideHomeAdapter
import com.ydl.confide.home.bean.ConfideHomeAllFiltersBean
import com.ydl.confide.home.bean.ConfideHomeBodyBean
import com.ydl.confide.home.bean.ConfideHomeFiterItemBean
import com.ydl.confide.home.config.IConfideHomeConfig
import com.ydl.confide.home.contract.IConfideHomeContract
import com.ydl.confide.home.popwindow.ConfideHomeGoodPopupWindow
import com.ydl.confide.home.popwindow.ConfideHomeSexAgePopupWindow
import com.ydl.confide.home.popwindow.ConfideHomeSortPopupWindow
import com.ydl.confide.home.util.ConfideHomeUtils
import com.ydl.confide.home.widget.ConfideHomeFilterView
import com.ydl.confide.router.PhoneCallIn
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.model.Music
import com.ydl.media.view.PlayerFloatHelper
import com.ydl.media.view.PlayerFloatView
import com.ydl.webview.ProgressWebView
import com.ydl.webview.TellData
import com.ydl.webview.WebModularServiceUtils.Companion.getWebService
import com.ydl.ydl_router.manager.YDLRouterManager
import com.ydl.ydl_router.manager.YDLRouterParams
import com.ydl.ydlcommon.base.BaseActivity
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.ToastUtil
import com.yidianling.im.api.bean.IMRequestCallback

/**
 * @author yuanwai
 * @描述:倾诉首页事件处理类
 * @Copyright Copyright (c) 2018
 * @Company 壹点灵
 * @date 2018/8/10
 */
class ConfideHomeEventImpl(context: Context, var confideHomeView: IConfideHomeContract.View) : IConfideHomeEvent {

    private var mContext: Context? = null
    private var floatViewClickListener: PlayerFloatView.FloatViewPlayListener? = null

    init {
        mContext = context
    }

    /**
     * 跳转我的
     */
    override fun jumpMine() {
        ConfideHomeUtils.buildJumpMine(mContext!!)
    }

    /**
     * banner点击事件
     * @param linkUrl 跳转地址
     * @param position 点击索引
     * @param title banner 标题
     */
    override fun bannerClick(linkUrl: String?, position: Int?, title: String?) {
        link(linkUrl)
    }

    /**
     * 最近倾诉--继续倾诉
     */
    override fun latelyConfideClick(linkUrl: String?) {

        link(linkUrl)
    }

    /**
     * 最近倾诉--更多
     */
    override fun latelyConfideMore(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 分类点击事件
     * @param linkUrl
     */
    override fun categoryClick(linkUrl: String?) {

        link(linkUrl)
    }

    /**
     * 为你推荐--向TA倾诉
     * @param linkUrl 跳转地址
     */
    override fun recommendClick(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 为你推荐--更多
     * @param linkUrl 跳转地址
     */
    override fun recommendMoreClick(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 听声寻人--向TA倾诉
     * @param linkUrl 跳转地址
     */
    override fun soundClick(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 听声寻人--更多
     * @param linkUrl 跳转地址
     */
    override fun soundMoreClick(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 最佳倾诉榜单--点我倾诉
     * @param linkUrl 跳转地址
     */
    @SuppressLint("JavascriptInterface", "ClickableViewAccessibility")
    override fun consultantClick(linkUrl: String?) {
        val bottomSheetDialog= mContext?.let { BottomSheetDialog(it) }
        bottomSheetDialog?.setContentView(R.layout.confide_webview)
        bottomSheetDialog?.show()
       var wv_content = bottomSheetDialog?.findViewById<ProgressWebView>(com.ydl.webview.R.id.wv_content)
        val setting: WebSettings = wv_content?.settings!!
        //支持js
        //支持js
        setting.setJavaScriptEnabled(true)
        //设置字符编码
        //设置字符编码
        setting.setDefaultTextEncodingName("GBK")
        setting.setDomStorageEnabled(true)
        val appCachePath: String = mContext?.getCacheDir()?.getAbsolutePath().toString()
        setting.setAppCachePath(appCachePath)
        setting.setAllowFileAccessFromFileURLs(true)
        setting.setAppCacheEnabled(true)
        setting.setAllowFileAccess(true)
        // 解决图片不显示
        // 解决图片不显示
        setting.setBlockNetworkImage(false)

        wv_content!!.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY //滚动条风格,为0指滚动条不占用空间,直接覆盖在网页上
        var jtoJHandle = getWebService().getJavascripHandler(mContext as Activity,tellData = TellData())

        wv_content!!.addJavascriptInterface(jtoJHandle, "javascriptHandler")
        bottomSheetDialog?.behavior?.peekHeight=1500
        //true是跳过peekHeight,直接滑下去,false是可以滑动到顶部还可以保持peekHeight在滑下去
//        bottomSheetDialog?.behavior?.skipCollapsed=true
        wv_content.loadUrl("https://m.ydl.com/jy/experts/23035?v=4.0.99&uid=9404770&ts=1652787528&toConfide=1&" +
                "platform_main_theme_light=00D4DF&platform_main_theme_bright=EAFAFC&platform_main_theme=00C9E2&isFromApp=1&" +
                "id=1927&ffrom=android_zhuzhan&barHeight=81&accessToken=87cba5b57f9bb196856ade3522805c11MjIwMw&sign=" +
                "6ce496690d7d5a184935f986c3631cc2")
        wv_content.setOnTouchListener(object :View.OnTouchListener{
            override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
                //canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部
                if (!wv_content.canScrollVertically(-1)) {
                    wv_content.requestDisallowInterceptTouchEvent(false);
                }else{
                    wv_content.requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }

        })
//        link(linkUrl)
    }

    /**
     * 最佳倾诉榜单--更多情感恋爱专家
     * @param linkUrl 跳转地址
     */
    override fun consultantMoreClick(linkUrl: String?) {
        link(linkUrl)
    }

    /**
     * 播放音频文件
     * @param type   当前模块数据类型
     * @param index 当前的模块里的数据索引位置
     * @param playUrl 播放地址
     */
    override fun playVoice(type: Int?, index: Int?, playUrl: String?) {

        val mu = Music()
        mu.path = playUrl
        AudioPlayer.get().singlePlay(mu)
        umengPlayVoice(type)
        confideHomeView.updataPlayStatu(type, index!!, 0, true)
        initCache(type, index!!, 0, playUrl)
        initConfidePlayerListener()
    }

    override fun playVoice(type: Int?, index: Int?, recommendId: Int, playUrl: String?, name: String?) {
        val mu = Music()
        mu.title = name
        mu.path = playUrl
        AudioPlayer.get().singlePlay(mu)
        if (PlayerFloatHelper.isShow(mContext!!)) {
            if (AudioPlayer.get().playMode.value() == 1) {
                PlayerFloatHelper.removeView(mContext!!)

                PlayerFloatHelper.show(mContext!!)
            } else {
                PlayerFloatHelper.setPlayingState(mContext!!)
            }

        } else {
            mContext?.let { PlayerFloatHelper.show(it) }
        }

        umengPlayVoice(type)
        confideHomeView.updataPlayStatu(type, index!!, recommendId, true)
        initCache(type, index!!, recommendId, playUrl)
        initConfidePlayerListener()
    }

    private fun initConfidePlayerListener() {
        if (floatViewClickListener == null) {
            floatViewClickListener = object : PlayerFloatView.FloatViewPlayListener {
                override fun onStartClick() {
                    confideHomeView.updataPlayStatu(cacheType, cacheIndex!!, cacheSubIndex, true)
                }

                override fun onPlayFinish() {
                    confideHomeView.updataPlayStatu(9999, 0, 0, false)
                }

                override fun onPauseClick() {
                    confideHomeView.updataPlayStatu(9999, 0, 0, false)
                }

            }

            PlayerFloatHelper.addClickListener(floatViewClickListener as PlayerFloatView.FloatViewPlayListener);
        }
    }

    private fun initCache(type: Int?, index: Int?, sub_index: Int, playUrl: String?) {
        cachePlayUrl = playUrl
        cacheType = type
        cacheIndex = index
        cacheSubIndex = sub_index
    }

    //友盟统计埋点
    private fun umengPlayVoice(type: Int?) {
        when (type) {
            //为你推荐
            IConfideHomeConfig.TYPE_RECOMMEND -> {
            }
            //听声寻人
            IConfideHomeConfig.TYPE_SOUND -> {
            }
            //咨询师推荐
            IConfideHomeConfig.TYPE_CONSULTANT -> {
            }
        }
    }

    /**
     * 播放缓存变量 用于重播使用
     */
    private var cachePlayUrl: String? = null
    private var cacheType: Int? = -1
    private var cacheIndex: Int? = -1
    private var cacheSubIndex: Int = -1

    override fun rePlayVoice() {
        if (TextUtils.isEmpty(cachePlayUrl)) {
            return
        }
        AudioPlayer.get().playPause()
        confideHomeView.updataPlayStatu(cacheType, cacheIndex!!, cacheSubIndex, true)
    }

    /**
     * 暂停播放音频文件
     */
    override fun pauseVoice() {
        AudioPlayer.get().playPause()
        PlayerFloatHelper.updatePlayState()
        //因为9999 类型不存在 所以就能把状态全部置为暂停状态了 偷个懒
        confideHomeView.updataPlayStatu(9999, 0, 0, false)
    }

    override fun destoryPlayer() {
        PlayerFloatHelper.hide()
        PlayerFloatHelper.playTempData = hashMapOf<String,String>()
        AudioPlayer.get().stopPlayer()
        floatViewClickListener?.let { PlayerFloatHelper.removeClickListener(it) };
    }

    /**
     * 私聊
     */
    override fun toChatForMsg(doctorId: String?) {
        if (null != mContext && mContext is Activity){
            PhoneCallIn.loginByOneKeyLogin(mContext as Activity,true)
            return
        }
        if (mContext is AppCompatActivity && !TextUtils.isEmpty(doctorId)) {
            PhoneCallIn.startChat(mContext as AppCompatActivity, doctorId!!, 0x001, 0)
        }
        PhoneCallIn.getImService().createTextMessage(doctorId, "你好,我想找你倾诉,请尽快上线私聊我,我在等你。", object :
            IMRequestCallback<Void> {
            override fun onSuccess(aVoid: Void?) {
                (mContext as BaseActivity).dismissProgressDialog()
                ToastHelper.show("发送成功")
            }

            override fun onFailed(i: Int) {
                (mContext as BaseActivity).dismissProgressDialog()
                var message = "发送失败"
                if (i == 7101) {
                    message = "您已被对方拉黑!"
                }
                ToastHelper.show(message)
            }

            override fun onException(throwable: Throwable?) {
                (mContext as BaseActivity).dismissProgressDialog()
                ToastHelper.show("发送异常")
            }
        })
    }

    private fun link(linkUrl: String?) {
        if (null == linkUrl || linkUrl.isEmpty()) {
            return
        }
        if (linkUrl!!.startsWith("app")) {
            var uri = Uri.parse(linkUrl)
            //app://listen/list    列表
            //app://listen/lately  最近倾诉列表
            //因为android本地 没有最近倾诉列表 故都跳转 倾诉列表
            if ("listen" == uri.host) {
                var tabIndex = uri.getQueryParameter("type")
                if (TextUtils.isEmpty(tabIndex)) {
                    val intent1 = Intent(mContext, ConfideHomeActivity::class.java)
                    mContext?.startActivity(intent1)
                } else {
                    val intent1 = Intent(mContext, ConfideHomeActivity::class.java)
                    mContext?.startActivity(intent1)
                }
            }
        } else if (linkUrl.startsWith("http")) {
            YDLRouterManager.router(IYDLRouterConstant.ROUTER_H5_H5,
                    YDLRouterParams().putExtra(IYDLRouterConstant.EXTRA_URL, linkUrl), "")
        } else {
            YDLRouterManager.router(linkUrl)
        }
    }

    /**
     * 显示综合排序弹窗
     * @param v_line_top      显示弹窗的位置
     * @param filterView      隐藏的筛选栏View
     * @param bodyBean        数据bean
     * @param allFiltersBean  已选择的筛选bean
     * @param mConfideAdapter section适配器
     */
    override fun showSortPopupWindow(v_line_top: View, filterView: ConfideHomeFilterView, bodyBean: ConfideHomeBodyBean?, allFiltersBean: ConfideHomeAllFiltersBean, mConfideAdapter: ConfideHomeAdapter) {
        if (null == bodyBean) {
            return
        }
        var sortPopup: ConfideHomeSortPopupWindow? = null
        if (bodyBean.group != null && !bodyBean.group.isEmpty() && null != bodyBean.group[0].data && !bodyBean.group[0].data!!.isEmpty()) {
            ConfideHomeUtils.synchroTextDrawable(mContext!!, 1, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
            sortPopup = ConfideHomeSortPopupWindow(mContext!!, bodyBean.group[0].data!!, allFiltersBean!!.selectSort!!, object : ConfideHomeSortPopupWindow.OnSortItemSelectedListener {
                override fun onSortItemSelected(sortItem: ConfideHomeFiterItemBean) {

                    //更改小图标
                    ConfideHomeUtils.synchroTextDrawable(mContext!!, 1, IConfideHomeConfig.FILTER_STATUS_NORMAL, filterView, mConfideAdapter)
                    allFiltersBean.selectSort = sortItem
                    confideHomeView.recommendList(1)
                    sortPopup!!.dismiss()
                }
            })

            sortPopup.setOnDismissListener {
                ConfideHomeUtils.synchroTextDrawable(mContext!!, 1, IConfideHomeConfig.FILTER_STATUS_NORMAL, filterView, mConfideAdapter)
            }
            if (sortPopup!!.selectedSort != allFiltersBean.selectSort) {
                sortPopup!!.selectedSort = allFiltersBean.selectSort!!
                sortPopup!!.notifyDataSetChanged()
            }
            sortPopup!!.showAsDropDown(v_line_top)
        } else {
            ToastUtil.toastShort("数据初始化失败,请重新下拉刷新")
        }
    }

    /**
     * 显示性别年龄弹窗
     * @param v_line_top      显示弹窗的位置
     * @param filterView      隐藏的筛选栏View
     * @param bodyBean        数据bean
     * @param allFiltersBean  已选择的筛选bean
     * @param mConfideAdapter section适配器
     */
    override fun showSexAgePopupWindow(v_line_top: View, filterView: ConfideHomeFilterView, bodyBean: ConfideHomeBodyBean?, allFiltersBean: ConfideHomeAllFiltersBean, mConfideAdapter: ConfideHomeAdapter) {
        if (null == bodyBean || ((null == bodyBean.group || bodyBean.group.isEmpty()) && (null == bodyBean.group!![0].data || bodyBean.group[0].data!!.isEmpty()))) {
            ToastUtil.toastShort( "数据初始化失败,请重新下拉刷新")
            return
        }
        val sexData = ArrayList<ConfideHomeFiterItemBean>()
        if (null != bodyBean.group[0].data) {
            sexData.addAll(bodyBean.group[0].data!!)
        }
        val ageData = ArrayList<ConfideHomeFiterItemBean>()
        if (1 < bodyBean.group.size && null != bodyBean.group[1].data) {
            ageData.addAll(bodyBean.group[1].data!!)
        }
        val categoryPopup = ConfideHomeSexAgePopupWindow(mContext!!, sexData, ageData, allFiltersBean)
        ConfideHomeUtils.synchroStyle(mContext!!, 2, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
        categoryPopup!!.setOnDismissListener {
            if (allFiltersBean.selectSex!!.id != "-1" || allFiltersBean.selectAgeData!!.size > 0) {
                ConfideHomeUtils.synchroTextColor(mContext!!, 2, IConfideHomeConfig.FILTER_STATUS_FILTERED, filterView, mConfideAdapter)
            } else {
                ConfideHomeUtils.synchroTextColor(mContext!!, 2, IConfideHomeConfig.FILTER_STATUS_NORMAL, filterView, mConfideAdapter)
            }
        }
        categoryPopup!!.onGoodSelectedListener = object : ConfideHomeSexAgePopupWindow.OnSexAgeSelectedListener {
            override fun onSexAgeSelected(sexData: ConfideHomeFiterItemBean, ageData: ArrayList<ConfideHomeFiterItemBean>) {
                var ageBuild = StringBuilder()
                if (ageData != null) {
                    for (data in ageData) {
                        ageBuild.append("${data.name};")
                    }
                }

                ConfideHomeUtils.synchroTextColor(mContext!!, 2, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
                allFiltersBean.selectSex!!.name = sexData.name
                allFiltersBean.selectSex!!.id = sexData.id
                allFiltersBean.selectAgeData!!.clear()
                allFiltersBean.selectAgeData!!.addAll(ageData)
                confideHomeView.recommendList(1)
                categoryPopup.dismiss()
            }
        }
        categoryPopup!!.showAsDropDown(v_line_top)
    }

    /**
     * 显示擅长方向弹窗
     * @param v_line_top      显示弹窗的位置
     * @param filterView      隐藏的筛选栏View
     * @param bodyBean        数据bean
     * @param allFiltersBean  已选择的筛选bean
     * @param mConfideAdapter section适配器
     */
    override fun showGoodPopupWindow(v_line_top: View, filterView: ConfideHomeFilterView, bodyBean: ConfideHomeBodyBean?, allFiltersBean: ConfideHomeAllFiltersBean, mConfideAdapter: ConfideHomeAdapter) {
        if (bodyBean != null && null != bodyBean.group && !bodyBean.group.isEmpty() && null != bodyBean.group[0].data && !bodyBean.group[0].data!!.isEmpty()) {
            val categoryPopup = ConfideHomeGoodPopupWindow(mContext!!, bodyBean.group[0].data!!, allFiltersBean.selectGoodData!!)
            ConfideHomeUtils.synchroStyle(mContext!!, 3, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
            categoryPopup!!.setOnDismissListener {
                if (allFiltersBean.selectGoodData!!.size > 1 || (allFiltersBean.selectGoodData!!.size == 1 && allFiltersBean!!.selectGoodData!![0] != bodyBean.group!![0].data!![0])) {
                    ConfideHomeUtils.synchroTextColor(mContext!!, 3, IConfideHomeConfig.FILTER_STATUS_FILTERED, filterView, mConfideAdapter)
                } else {
                    ConfideHomeUtils.synchroTextColor(mContext!!, 3, IConfideHomeConfig.FILTER_STATUS_NORMAL, filterView, mConfideAdapter)
                }
            }
            categoryPopup!!.onGoodSelectedListener = object : ConfideHomeGoodPopupWindow.OnGoodSelectedListener {
                override fun onGoodSelected(selectedGoodsList: ArrayList<ConfideHomeFiterItemBean>) {
                    var ageBuild = StringBuilder()
                    if (selectedGoodsList != null) {
                        for (data in selectedGoodsList) {
                            ageBuild.append("${data.name};")
                        }
                    }

                    ConfideHomeUtils.synchroTextColor(mContext!!, 3, IConfideHomeConfig.FILTER_STATUS_OPEN, filterView, mConfideAdapter)
                    allFiltersBean.selectGoodData.clear()
                    allFiltersBean.selectGoodData.addAll(selectedGoodsList)
                    confideHomeView.recommendList(1)
                    categoryPopup.dismiss()
                }
            }
            categoryPopup!!.showAsDropDown(v_line_top)
        } else {
            ToastUtil.toastShort("数据初始化失败,请重新下拉刷新")
        }
    }
}