package com.yidianling.consultant.modular.singlton

import android.app.Activity
import android.support.v7.app.AppCompatActivity
import com.ydl.ydlcommon.utils.YdlBuryPointUtil
import com.yidianling.common.tools.ToastUtil
import com.yidianling.consultant.dialog.ConsultAssistantDialog
import com.yidianling.consultant.model.SearchApi
import com.yidianling.consultant.router.ConsultantIn
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import java.util.*

/**
 * Created by xj on 2019/11/14.
 */
class ConsultAssistantDialogUtils private constructor() {

    companion object {
        val INSTANCE by lazy { ConsultAssistantDialogUtils() }
    }

    var consultAssistantDialogFromHomePage: ConsultAssistantDialog? = null // 首页展示的dialog
    var consultAssistantFragmentDialog: ConsultAssistantDialog? = null //咨询师列表fragment页面展示的dialog
    var expertSearchPageHasShown: Boolean = false // 专家咨询列表fragment页面是否已经展示
    var consultAssistantActivityDialog: ConsultAssistantDialog? = null //咨询师列表activity页面展示的dialog
    var expertSearchActivityPageHasShown: Boolean = false // 专家咨询列表activity页面是否已经展示
    var timer: Timer? = null


    /**
     *判断是否符合代码展示逻辑
     * origin 展示请求来源    首页 home_index 咨询列表 doctor_list
     * fromActivity 默认不是来自于咨询师列表activity
     */
    fun fitRequest(activity: Activity, origin: String, fromActivity: Boolean = false) {
        when (origin) {
            "home_index" -> {
                if (ConsultantIn.isLogin() &&
                    ConsultantIn.getUserImpl().getUserInfo()?.user_type == 1
                ) {
                    shouldShowDialog(activity, origin)
                }
            }
            "doctor_list" -> {
                shouldShowDialog(activity, origin, fromActivity = fromActivity)
            }
        }

    }

    /**
     * 判断是否符合接口展示逻辑
     */
    private fun shouldShowDialog(activity: Activity, origin: String, isDelay: Boolean = false, fromActivity: Boolean = false) {
        // 请求接口判断导医咨询助理按钮是否展示
        SearchApi.getSearchApi().getConsultAssistantRequest(origin)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                if (it.data) {
                    if (origin == "home_index") {
                        showFromYdlHome(activity)
                    } else if (origin == "doctor_list") {
                        show(activity, fromActivity)
                    }
                }
            }
    }

    //////////////////////////////////////  首页的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////

    /**
     * 首页页展示
     */
    fun showFromYdlHome(activity: Activity) {
        if (!activity.isFinishing) {
            if (consultAssistantDialogFromHomePage == null) {
                consultAssistantDialogFromHomePage = ConsultAssistantDialog(
                        activity,
                        object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                            override fun onClickAction() {
                                //获取用户uid
                                YdlBuryPointUtil.sendClick("home_page_assistant_click")
                                getConsultAssistantUid(activity)
                            }

                        })
            }
            consultAssistantDialogFromHomePage?.show()
        }
    }

    /**
     * 首页隐藏
     */
    fun hideFromHomePage() {
        consultAssistantDialogFromHomePage?.hide()
    }

    //////////////////////////////////////  首页的展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////

    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块start  ///////////////////////////////////////////////////
    /**
     * 咨询师列表页展示
     */
    fun show(activity: Activity, fromActivity: Boolean = false) {
        // 来自于fragment咨询师列表
        if (!fromActivity) {
            if (!expertSearchPageHasShown && timer == null) {
                timer = Timer()
                timer!!.schedule(object : TimerTask() {
                    override fun run() {
                        Observable.just(1).observeOn(AndroidSchedulers.mainThread())
                                .subscribe {
                                    expertSearchPageHasShown = true
                                    showDialog(activity)
                                }
                    }
                }, 5000)
            } else {
                showDialog(activity)
            }
        }else {// 来自于activity咨询师列表
            if (!expertSearchActivityPageHasShown && timer == null) {
                timer = Timer()
                timer!!.schedule(object : TimerTask() {
                    override fun run() {
                        Observable.just(1).observeOn(AndroidSchedulers.mainThread())
                                .subscribe {
                                    expertSearchActivityPageHasShown = true
                                    showDialog(activity, true)
                                }
                    }
                }, 5000)
            } else {
                showDialog(activity, true)
            }
        }
    }

    /**
     * 咨询师列表页展示浮层
     */
    fun showDialog(activity: Activity, fromActivity: Boolean = false) {
        if (!fromActivity) {
            if (!activity.isFinishing) {
                if (consultAssistantFragmentDialog == null) {
                    consultAssistantFragmentDialog = ConsultAssistantDialog(
                            activity,
                            object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                                override fun onClickAction() {
                                    YdlBuryPointUtil.sendClick("assistant_list_click")
                                    // 咨询师列表页面且未登录情况下,跳转登录页面
                                    if (!ConsultantIn.isLogin()) {
                                        ConsultantIn.toLogin(activity)
                                    } else {
                                        //获取用户uid
                                        getConsultAssistantUid(activity)
                                    }
                                }

                            })
                }
                consultAssistantFragmentDialog?.show()
            }
        }else {
            if (!activity.isFinishing) {
                if (consultAssistantActivityDialog == null) {
                    consultAssistantActivityDialog = ConsultAssistantDialog(
                            activity,
                            object : ConsultAssistantDialog.OnConsultAssistantClickListener {
                                override fun onClickAction() {
                                    YdlBuryPointUtil.sendClick("assistant_list_click")
                                    // 咨询师列表页面且未登录情况下,跳转登录页面
                                    if (!ConsultantIn.isLogin()) {
                                        ConsultantIn.toLogin(activity)
                                    } else {
                                        //获取用户uid
                                        getConsultAssistantUid(activity)
                                    }
                                }

                            })
                }
                consultAssistantActivityDialog?.show()
            }
        }
    }


    /**
     * 咨询师列表页隐藏
     */
    fun hide() {
        consultAssistantFragmentDialog?.hide()
    }

    /**
     * 释放本单例所有资源(咨询师列表fragmnet在MainActivity,
     * 且在MainActivity销毁的时候,会先执行咨询师列表fragmnet
     * 的ondeatroy,所以这边直接在该专家咨询列表碎片执行该方法)
     */
    fun resetStatus() {
        consultAssistantDialogFromHomePage?.dismiss()
        consultAssistantFragmentDialog?.dismiss()
        consultAssistantActivityDialog?.dismiss()
        timer?.cancel()
        timer = null
        expertSearchPageHasShown = false
        expertSearchActivityPageHasShown = false
        consultAssistantDialogFromHomePage = null
        consultAssistantFragmentDialog = null
        consultAssistantActivityDialog = null
    }

    /**
     * 咨询师列表activity页面使用的重置本单例关于专家咨询列表页面得状态
     */
    fun expertSearchResetStatus() {
        consultAssistantActivityDialog?.dismiss()
        timer?.cancel()
        timer = null
        expertSearchActivityPageHasShown = false
        consultAssistantActivityDialog = null
    }

    //////////////////////////////////////  咨询师列表页面的展示隐藏逻辑 代码块end  ///////////////////////////////////////////////////

    private fun getConsultAssistantUid(activity: Activity) {
        // 请求接口获取咨询助理的uid
        SearchApi.getSearchApi().getConsultAssistantUidRequest()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                if (it.code == "200" && it.data != 0.toLong()) {
                    ConsultantIn.startP2PSession(activity as AppCompatActivity, it.data.toString())
                } else {
                    ToastUtil.toastShort("咨询助理忙碌中,请稍后再试")
                }
            }
    }
}