package com.yidianling.im.api.service

import android.app.Activity
import android.app.Application
import android.content.Context
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.template.IProvider
import com.yidianling.im.api.bean.IMInitConfigBean
import com.yidianling.im.api.bean.IMLoginInfo
import com.yidianling.im.api.bean.IMRegisterObserverCustomNotificationCallBack
import com.yidianling.im.api.bean.IMRequestCallback
import com.yidianling.im.api.bean.IMSendCustomNotificationResultCallBack
import com.yidianling.im.api.listener.ApiStringResponseCallback

/**
 * author : Zhangwenchao
 * e-mail : zhangwch@yidianling.com
 * time   : 2018/04/13
 */
interface IImService : IProvider {

    // 打开与小壹聊天界面
    fun startP2PXiaoYi(context: Context)

    // 打开私聊界面
    fun startP2PSession(context: Activity, toUid: String)

    fun setAccount(account: String)

    fun setChattingAccountAll()

    fun setChattingAccountNone()

    fun isHasUnread(): Boolean

    fun login(info: IMLoginInfo, callback: IMRequestCallback<IMLoginInfo>?)

    /**
     * 绑定手机后，重新登录IM
     */
    fun imLogin(info: IMLoginInfo)

    fun logout()

    fun clear()
    /**
     * 创建一条普通文本消息
     * @param sessionId   聊天对象ID
     * @param content     文本消息内容
     */
    fun createTextMessage(sessionId: String?, content: String, callback: IMRequestCallback<Void>)

    fun sendSubscriptionTimeMessage(sessionId: String?, content: String, callback: IMRequestCallback<Void>)

    fun showSelector(activity: Activity, requestCode: Int)

    fun sendTestResultMessage(uid: String, content: String, title: String?, head: String?, url: String?, id: Int, share_url: String?, callback: IMRequestCallback<Void>)

    fun startChat(context: Activity, toUid: String, flag: Int, canTalk: Int)

    fun startChat(context : Activity ,toUid : String ,flag : Int , canTalk : Int, isFramQingsu: Int, isFromMessageList: Boolean)

    fun startChatCloseReplaceChat(context : Activity ,toUid : String)


    /**
     * 根据对方uid获取未读数
     */
    fun getUnReadByUid(uid: String): Int


    /**
     * 获取自己的所有未读数
     */
    fun getAllUnReadNum(): Int

    /**
     * 发送自定义通知
     */
    fun sendCustomNotification(toUid: String, content: String, callback: IMSendCustomNotificationResultCallBack)

    /**
     * 注册自定通知接收器
     */
    fun registerObserveCustomNotification(callback: IMRegisterObserverCustomNotificationCallBack)


    fun getMultiMessageFragment(): Fragment

    // 跳转下一个未读数
    fun nextUnreadItem(fragment: Fragment): Boolean

    // 判断是否存在私聊页面
    fun isChatFragment(fragment: Fragment): Boolean

    // 判断云信是否登录
    fun isImLogin(): Boolean

    // 刷新未读数
    fun requestTopUnReadNumber(fragment: Fragment)

    // 登录IM
    fun loginIm(uid: String?, hxPwd: String?)

    //注销
    fun logoutAll()

    // 初始化imcache
    fun initImCache(mContext: Context)

    // 客服
    fun startKefuChat(context: Context, toUid: String, flag: Int, canTalk: Int)

    //
    fun startP2PSession(mContext: Context, userType: Int, account: String, toChatUsername: String, toName: String, head: String)

    fun updateUserHead(head: String?)

    fun updateUserName(name: String?)

    fun imInSetRing(bool: Boolean)

    fun imInSetVibrate(bool: Boolean)

    fun getUserInfoDescription(): String?

    fun getEarModeKey(): String

    fun getEarModeOpenType(): String

    fun getEarModeIsOpen(): Boolean

    fun getEarModeCloseType(): String

    fun updateEarMode(bool: Boolean)

    fun getChatUid(context: Context?, uid: String, callback: ApiStringResponseCallback)

    fun chatScheule(context: Activity, userUrl: String, docUrl: String, dsmId: Int, title: String, toUid: Int)

    fun initIm(app: Application, activity: Class<out Activity>)

    fun initIm(app: Application, activity: Class<out Activity>,imInitBean: IMInitConfigBean)

    fun isWifiOr3G(activity: Activity): Boolean
}