package com.yidianling.dynamic.router

import android.app.Activity
import android.content.Intent
import android.support.v4.app.DialogFragment
import android.support.v7.app.AppCompatActivity
import com.ydl.confide.api.IConfideService
import com.ydl.course.api.ICourseService
import com.ydl.ydlcommon.actions.imagepicker.PickerCallback
import com.ydl.ydlcommon.actions.imagepicker.YdlImagePicker
import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.modular.ModularServiceManager
import com.yidianling.consultant.api.IConsultantService
import com.yidianling.dynamic.api.IDynamicService
import com.yidianling.fm.api.service.IFMService
import com.yidianling.im.api.service.IImService
import com.yidianling.tests.api.service.ITestsApiService
import com.yidianling.user.api.bean.UserResponseBean
import com.yidianling.user.api.service.IAppService
import com.yidianling.user.api.service.IUserService

/**
 * author : Zhangwenchao
 * e-mail : zhangwch@yidianling.com
 * time   : 2018/04/25
 */
object DynamicIn {

    fun getImService(): IImService {
        return ModularServiceManager.provide(IImService::class.java)
    }

    fun getAppService(): IAppService {
        return ModularServiceManager.provide(IAppService::class.java)
    }

    fun getUserService(): IUserService {
        return ModularServiceManager.provide(IUserService::class.java)
    }

    fun getDynamicService(): IDynamicService {
        return ModularServiceManager.provide(IDynamicService::class.java)
    }

    fun getCourseService(): ICourseService {
        return ModularServiceManager.provide(ICourseService::class.java)
    }

    fun getTestsService(): ITestsApiService {
        return ModularServiceManager.provide(ITestsApiService::class.java)
    }

    fun getFMService(): IFMService {
        return ModularServiceManager.provide(IFMService::class.java)
    }

    fun getConsultService(): IConsultantService {
        return ModularServiceManager.provide(IConsultantService::class.java)
    }

    fun getConfideService(): IConfideService {
        return ModularServiceManager.provide(IConfideService::class.java)
    }
  
    /**
     * 获取专家主页url
     */
    fun getExpertHost(): String {
        return  HttpConfig.H5_URL + "experts/"
    }

    fun getShareExpertHost(): String {
        return  HttpConfig.MH5_URL+ "experts/"
    }

    fun isLogin(): Boolean {
        return getUserService().isLogin()?:false
    }

    fun getUserInfo(): UserResponseBean.UserInfo? = getUserService().getUserInfo()

    fun loginWayIntent(activity: Activity): Intent? {
        return getUserService().loginWayIntent(activity)
    }

    fun personalInfoIntent(activity: Activity){
        getAppService().personalInfoIntent(activity)
    }

    fun inputPhoneIntent(activity: Activity, smsAction: String): Intent? {
        return getUserService().inputPhoneIntent(activity, smsAction)
    }

    fun mainIntent(activity: Activity){
        getAppService().mainIntent(activity)
    }

    fun mainIntent(activity: Activity,tab :Int){
        getAppService().mainIntent(activity,tab,false)
    }

    fun expertSearchIntent(activity: Activity, category: Int, showType: Int, isInitShowHot: Boolean): Intent? {
        return getConsultService().expertSearchIntent(activity, category, showType, isInitShowHot)
    }

    fun testResultH5(testResultId: Int){
        getTestsService().testH5Result(testResultId.toString())
    }

    fun testDetailH5(testId: Int){
        getTestsService().testDetailH5(testId.toString());
    }

    fun phoneCallIntent(activity: Activity): Intent? {
        return getConfideService().phoneCallIntent(activity)
    }

    fun fmDetailIntent(activity: Activity, fmId: Int): Intent? {
        return getFMService().fmDetailIntent(activity, fmId)
    }

    fun getFmId(): Int {
        return getFMService().getFmId() ?: 0
    }

    fun rechargeIntent(activity: Activity){
        getAppService().rechargeIntent(activity)
    }

    fun phoneCallFragment(head: String, callId: String): DialogFragment? {
        return getConfideService().phoneCallFragment(head, callId)
    }


    fun startChat(activity: AppCompatActivity, toUid: String) {
        getImService().startP2PSession(activity, toUid)
    }

    fun isFmPlaying(): Boolean {
        return getFMService().isPlaying() ?: false
    }

    fun isCoursePlaying(): Boolean {
        return getCourseService().isPlaying() ?: false
    }

    fun playCourse(){
        if (!isCoursePlaying()){
            getCourseService().play()
        }
    }

    fun pauseCourse(){
        if (isCoursePlaying()){
            getCourseService().pause()
        }
    }

    fun rePlayFM(){
        getFMService().replay()
    }

    fun pauseFm(){
        getFMService().pause()
    }

    fun showSelector(activity: Activity, requestCode: Int) {
        getImService().showSelector(activity, requestCode)
    }

    fun startPicker(activity: AppCompatActivity, openCamera: Boolean, callback: PickerCallback) {
        YdlImagePicker.startPicker(activity, openCamera, callback)
    }

    /**
     * 课程播放页
     */
    fun startCoursePlayPage(activity: Activity){
        getCourseService().startCoursePlayPage(activity,1)
    }
}