package com.yidianling.im.http

import com.ydl.ydlcommon.base.config.YDL_DOMAIN
import com.ydl.ydlcommon.base.config.YDL_DOMAIN_JAVA
import com.ydl.ydlcommon.data.http.BaseAPIResponse
import com.ydl.ydlcommon.data.http.BaseResponse
import com.ydl.ydlnet.YDLHttpUtils
import com.yidianling.im.api.bean.IMExpertBuild
import com.yidianling.im.bean.*
import io.reactivex.Observable
import okhttp3.RequestBody
import retrofit2.http.*

/**
 * im相关网络接口
 * Created by hrvie on 17-11-24.
 */
interface ImRetrofitApi {

    companion object {
        var instance: ImRetrofitApi? = null

        fun getImRetrofitApi(): ImRetrofitApi {
            if (instance == null) {
                instance = YDLHttpUtils.obtainApi(ImRetrofitApi::class.java)
            }
            return instance!!
        }

        fun getImJavaApi(): ImRetrofitApi {
            return YDLHttpUtils.obtainApi(ImRetrofitApi::class.java)
        }
    }

    //私聊 获取聊天者的订单关系数据
    @FormUrlEncoded
    @POST("consult/get-expert")
    fun getExpert(@FieldMap params: Map<String, String>): Observable<BaseResponse<IMExpertBuild>>


    //获取用户的状态（用户、专家、助理）
    @GET("user/userType")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun getUserType(@Query("targetUid") uid: String): Observable<BaseResponse<UserTypeBean>>

    //根据专家uid获取私聊的目标uid（有可能是专家uid，有可能是助理uid）
    @GET("consult/assistant/chat-user")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun getChatUid(@Query("doctorUid") uid: String): Observable<BaseAPIResponse<DoctorAssistantRespDtoBean>>

    //私聊 获取聊天者的订单关系数据   -----进入聊天前调用的接口，采用新的java接口，直接php  getExpert 接口废弃
    @GET("doctor/personalChat")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun getPersonalChat(@Query("doctorUid") doctorUid: String): Observable<BaseResponse<IMExpertBuild>>

    //获取举报理由
    @FormUrlEncoded
    @POST("ask/report-reason")
    fun getReportReason(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //举报心事或者心事回复(动态)
    @FormUrlEncoded
    @POST("ask/report")
    fun reportWorry(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //删除私聊记录
    @FormUrlEncoded
    @POST("consult/rm-history")
    fun rmHistory(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //加入黑名单
    @FormUrlEncoded
    @POST("consult/set-black")
    fun setBlackCall(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //从黑名单移除
    @FormUrlEncoded
    @POST("consult/rm-black")
    fun rmBlackCall(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //红包详情
    @FormUrlEncoded
    @POST("uc/bonus-info")
    fun redPacketDetail(@FieldMap params: Map<String, String>): Observable<BaseResponse<RedPacketDetailBean>>

    //设置课程直播状态
    @POST("course/set-live-status")
    @FormUrlEncoded
    fun setCourseStatus(@FieldMap maps: Map<String, String>): Observable<BaseResponse<Any>>

    //获取课程直播状态
    @POST("course/get-live-status")
    @FormUrlEncoded
    fun getCourseStatus(@FieldMap maps: Map<String, String>): Observable<BaseResponse<CourseStatusBean>>

    /**
     * 私聊更多按钮 - 推荐倾诉 - by :洪平
     * @param uid
     * @param listenerUid
     * @return
     */
    @GET("chat/pushServeStatus")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun getPushConfideStatus(
        @Query("uid") uid: String,
        @Query("listenerUid") listenerUid: String
    ): Observable<BaseAPIResponse<PushConfideStatusBean>>

    @POST("lingxi/asistant/buryRedPoint")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun imBuryRedPoints(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>

    /**确认订单 */
    @POST("counselor/order/standardOrderServiceOperation")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun standardOrderServiceOperation(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>

    /**已完成订单*/
    @GET("consult/user/order/affirmComplete")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun affirmComplete(@Query("id") orderId: String): Observable<BaseAPIResponse<Any>>

    //回答问题接口
    @POST("chat/sendCustomizeMessage")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun lingxiAnswerQuestion(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>

    //回答问题接口批量发送
    @POST("chat/batchSendCustomizeMessage")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun batchSendCustomizeMessage(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>

    //发送通知接口
    @POST("chat/sendNoticeMessage")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun lingxiSendNotice(@Body body: RequestBody): Observable<BaseAPIResponse<Any>>


    /**已完成订单*/
    @GET("systemconfig/getSystemConfigByKeyword")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun getSystemConfigByKeyword(@Query("keyword") keyword: String): Observable<BaseAPIResponse<SystemConfigByKeywordBean>>

    //获取咨询助理uid
    /*
    * location字段说明(sign1存储页面位置，1:首页导医入口进入2:M站入口进入3:问答列表页进入4:我的入口进入
    * 5:情绪疏导在线咨询入口进入6:咨询列表页导医入口进入7:实用心理课入口进入8:实用心理课课程列表页进入9:测评解读页进入
    * 10:搜索页面进入11:首页咨询列表进入12:厌学的真相在线咨询入口，0是小壹意向客户传0)
    *
    * ffrom_2   亲子教育添加字段
    *naviType = "1";导医配置开关，返100跳转咨询tab，如果返其他则维持原有逻辑。
    * */

    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA, "Content-Type:application/json")
    @GET("consult/assistant/chat-distribute")
    fun getConsultAssistantUidRequest(
        @Query("location") location: Int,
        @Query("ffrom_2") ffrom: String?,
        @Query("naviType") naviType: String = "1"
    ): Observable<BaseAPIResponse<Long>>
}