package com.yidianling.user.http

import com.google.gson.internal.LinkedTreeMap
import com.ydl.ydlcommon.base.config.YDLConstants
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.yidianling.router.user.UserResponse
import com.yidianling.user.http.response.*
import io.reactivex.Observable
import okhttp3.RequestBody
import retrofit2.http.*

/**
 * author : Zhangwenchao
 * e-mail : zhangwch@yidianling.com
 * time   : 2018/02/02
 */
interface UserApi {

    //登录
    @FormUrlEncoded
    @POST("user/user")
    fun login(@FieldMap params: Map<String, String>): Observable<BaseResponse<UserResponse>>

    //国家列表
    @FormUrlEncoded
    @POST("user/country-list")
    fun countryList(@Field(YDLConstants.HOLDER_PARAM ) params: String): Observable<BaseResponse<CountryResponse>>

    //判断手机号是否存在
    @FormUrlEncoded
    @POST("user/phone-exist")
    fun phoneExists(@FieldMap params: Map<String, String>): Observable<BaseResponse<ExistResponse>>

    //获取验证码
    @FormUrlEncoded
    @POST("user/chk-code")
    fun getCode(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //绑定手机号
    @FormUrlEncoded
    @POST("user/bind-phone")
    fun bindPhone(@FieldMap params: Map<String, String>): Observable<BaseResponse<UserResponse>>

    //忘记密码
    @FormUrlEncoded
    @POST("user/forget")
    fun forget(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //注册
    @FormUrlEncoded
    @POST("user/reg")
    fun register(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //设置推送的channelId
    @FormUrlEncoded
    @POST("user/set-channel-id")
    fun setChannelId(@FieldMap params: Map<String, String>): Observable<BaseResponse<LinkedTreeMap<String, String>>>

    //第三方登录
    @POST("user/user_q_w")
    @Headers( YDL_DOMAIN + YDL_DOMAIN_JAVA)
    fun thirdPartyLogin(@Body body: RequestBody): Observable<BaseAPIResponse<UserResponse>>

    //设置用户信息
    @FormUrlEncoded
    @POST("user/set-info")
    fun setUserInfo(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //上传头像
    @Multipart
    @POST("user/set-info")
    fun uploadHeadImg(@PartMap params: MutableMap<String, RequestBody>): Observable<BaseResponse<Any>>

    //上传头像
    @Multipart
    @POST("user/set-info")
    fun uploadHeadImg(@Part("type") param: RequestBody): Observable<BaseResponse<Any>>

    //验证账号密码
    @FormUrlEncoded
    @POST("user/chkin-pass")
    fun checkPhonePass(@FieldMap params: Map<String, String>): Observable<BaseResponse<CheckPassword>>

    //绑定QQ
    @FormUrlEncoded
    @POST("user/bind-qq")
    fun bindQQ(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //绑定微信
    @FormUrlEncoded
    @POST("user/bind-wx")
    fun bindWx(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //登出
    @FormUrlEncoded
    @POST("user/logout")
    fun logout(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //更换手机时密码验证
    @FormUrlEncoded
    @POST("user/confirm-pwd")
    fun checkPwd(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //更换手机时最后校验验证码和手机
    @FormUrlEncoded
    @POST("user/replace-mob")
    fun changePhone(@FieldMap params: Map<String, String>): Observable<BaseResponse<Any>>

    //同意隐私政策接口
    @GET("user/agreePrivacyAgreement")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun privacyAgree(@Query("uid") uid: String): Observable<BaseResponse<Any>>

    //检查手机号来源
    @GET("user/phone_detection")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun checkPhoneStatus(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<ChcekPhoneResponeBean>>

    //服务端校验阿里一键认证
    @POST("phone/verification/init")
    fun checkAliAuth(@Body body: RequestBody): Observable<BaseResponse<PhoneAuthResponseBean>>

    //一键登录
    @POST("user/login_direct")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun autoLogin(@Body body: RequestBody): Observable<BaseResponse<UserResponse>>

    //手机号密码登录
    @POST("user/login_pwd")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun loginByPassword(@Body body: RequestBody): Observable<BaseResponse<UserResponse>>

    //重新设置密码
    @POST("user/reset_pwd")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun resetPwd(@Body body: RequestBody): Observable<BaseResponse<UserResponse>>

    //验证重置密码的短信验证码
    @GET("user/precheck_reset_sms")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun checkResetCode(@Query("phone") phone: String, @Query("countryCode") countryCode: String, @Query("code") code: String): Observable<BaseResponse<Any>>

    //发送登录验证码
    @GET("user/send_login_sms")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun sendLoginMsgCode(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<Any>>

    //发送忘记密码重置密码的验证码
    @GET("user/send_reset_sms")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun sendResetCode(@Query("phone") phone: String, @Query("countryCode") countryCode: String): Observable<BaseResponse<Any>>

    //绑定手机号
    @POST("user/bind_phone")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun bindPhone(@Body body: RequestBody): Observable<BaseResponse<Any>>

    //验证码登录
    @POST("user/login_sms")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun loginByMsgCode(@Body body: RequestBody): Observable<BaseResponse<UserResponse>>

    //第三方登录获取用户信息
    @POST("user/user_q_w")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun thirdPartJavaLogin(@Body body: RequestBody): Observable<BaseResponse<UserResponse>>


    //第三方登录解绑
    @POST("user/unbind_third")
    @Headers( YDL_DOMAIN+ YDL_DOMAIN_JAVA)
    fun unBindThirdLogin(@Body body: RequestBody): Observable<BaseResponse<Any>>
}