package com.ycgis.macall.personalcenter.p.request;

import com.google.gson.JsonObject;
import com.ycgis.macall.personalcenter.m.adapterbean.AppInfoBean;
import com.ycgis.macall.personalcenter.m.adapterbean.FeedbackBean;
import com.ycgis.macall.personalcenter.m.adapterbean.MessageBean;
import com.ycgis.macall.personalcenter.m.requestbean.BaseRequestModel;
import com.ycgis.macall.personalcenter.m.requestbean.FrequentlyBean;
import com.ycgis.macall.personalcenter.m.requestbean.GetDeptNameResult;
import com.ycgis.macall.personalcenter.m.requestbean.HomeBannerBean;
import com.ycgis.macall.personalcenter.m.requestbean.PagingModel;
import com.ycgis.macall.personalcenter.m.requestbean.WorkbenchModel;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

/**
 * @Describe Api 接口管理
 * 备注
 */
public interface RetrofitApi {
//    public final String baseJd = "";

    /**
     *  获取常见问题
     */
    @GET("app/v1/question")
    Observable<BaseRequestModel<List<FrequentlyBean>>> getQuestion();

    //获取热门城市、轨迹
    //http://192.168.0.109:8081/app/v1/reimburse/getPopularCity?userId=123
    @GET("app/v1/reimburse/getPopularCity")
    Observable<JsonObject> getPopularCity(@Query("userId") String userId);

    //城市报销标准
    //http://192.168.0.109:8081/app/v1/reimburse/getMoney?userId=123&city=%E4%B8%8A%E6%B5%B7&level=2
    @GET("app/v1/reimburse/getMoney")
    Observable<JsonObject> getMoneyCity(@Query("userId") String userId,@Query("city") String city,@Query("level") String level);

    //城市报销标准
    //http://192.168.0.109:8081/app/v1/reimburse/getCity?city=bd
    @GET("app/v1/reimburse/getCity")
    Observable<JsonObject> getSearchCity(@Query("city") String cityName);

    //城市报销标准
    //http://192.168.0.109:8081/app/v1/reimburse/getCity?city=bd
    @GET("app/v1/zamh/deptList")
    Observable<JsonObject> getDeptList(@Query("deptName") String deptName,@Query("page") Integer page, @Query("pageSize") Integer pageSize);

//    app/v1/zamh/deptList?deptName=安徽&page=1&pageSize=3

    /**
     * 获取登录方式
     * http://20.90.2.2/UniAuth/api/sso/v1/verifyBind
     */
    @FormUrlEncoded
    @POST()
    Observable<JsonObject> getLoginType(@Url String url,@FieldMap Map<String,String> param);

    @FormUrlEncoded
    @POST()
    Observable<ResponseBody> loadPhoto(@Url String url,@FieldMap Map<String,String> param);

    /**
     * 添加第三方应用操作日志
     */
    @POST()
    Observable<JsonObject> saveAppOperationLog(@Url String url,@Body RequestBody body);

    /**
     * 添加第三方应用操作日志
     */
    @POST("app/v1/zamh/addOperationRecords")
    Observable<JsonObject> saveAppOperationLog(@Body RequestBody body);

    /**
     *  获取所属地市
     */
    @GET()
    Observable<BaseRequestModel<GetDeptNameResult>> getDeptName(@Url String url,@Query("deptId") String deptId);

    /**
     * 非分页获取应用列表
     * @param deptCode
     * @param appName
     * @return
     */
    @GET("app/v1/zamh/applicationList")
    Observable<BaseRequestModel< List<AppInfoBean>>> applicationList(@Query("name") String appName, @Query("cityNumber") String  deptCode, @Query("attribution") Integer attribution);

    /**
     * 增加应用点击次数
     * @param applicationId 应用ID
     */
    @FormUrlEncoded
    @POST("app/v1/zamh/addClickCount")
    Observable<JsonObject> addClickCount(@Field("applicationId") long  applicationId );

    /**
     *
     */
    @GET("app/v1/zamh/recommendApplication")
    Observable<JsonObject> recommendApplication( );

    @GET("app/v1/zamh/getAllApplicationPage")
    Observable<BaseRequestModel<PagingModel<AppInfoBean>>> selectAppList(@Query("name") String appName,@Query("page") Integer page, @Query("pageSize") Integer pageSize);

    /**
     * 分页获取应用列表
     * @param cityNumber
     * @param page
     * @param pageSize
     * @param appName
     * @return
     */
    @GET("app/v1/zamh/applicationPage")
    Observable<BaseRequestModel<PagingModel<AppInfoBean>>> applicationPage( @Query("cityNumber") String cityNumber, @Query("page") Integer page, @Query("pageSize") Integer pageSize, @Query("name") String appName, @Query("attribution") Integer attribution);
    /**
     * 分页获取应用列表
     * @param page
     * @param pageSize
     * @return
     */
    @GET("app/v1/zamh/getWorkbenchApplication")
    Observable<BaseRequestModel<WorkbenchModel>> getWorkbenchApplication(@Query("page") Integer page, @Query("pageSize") Integer pageSize);


    /**
     * 获取有操作手册的列表
     * @param appName           qpp名称用于检索应用
     * @param cityNumber        机构编码
     * @param page              分页页码
     * @param pageSize          每页长度
     */
    @GET("app/v1/zamh/applicationHaveOperationGuide")
    Observable<BaseRequestModel<PagingModel<AppInfoBean>>> applicationCzsc(@Query("name") String appName,@Query("cityNumber") String cityNumber,@Query("page") Integer page,@Query("pageSize") Integer pageSize);

    /**
     *  根据ID获取操作手册列表
     */
    @GET("app/v1/zamh/operationGuideList")
    Observable<JsonObject> operationGuideList(@Query("applicationId") String appId);
    /**
     *  获取轮播图列表
     */
    @GET("app/v1/zamh/pictureList")
    Observable<BaseRequestModel<List<HomeBannerBean>>> getBannerList();

    /**
     *  添加反馈
     */
    @POST("app/v1/zamh/addFeedBack")
    Observable<JsonObject> addFeedBack(@Body RequestBody body);

    /**
     *  添加反馈
     */
    @GET("app/v1/zamh/feedbackList")
    Observable<BaseRequestModel<PagingModel<FeedbackBean>>> feedbackList(@Query("page") Integer page, @Query("pageSize") Integer pageSize);


    /**
     *  获取消息列表
     */
    @GET("app/v1/zamh/getMessage")
    Observable<BaseRequestModel<PagingModel<MessageBean>>> getMessage(@Query("state") Integer state, @Query("page") Integer page, @Query("pageSize") Integer pageSize);

    /**
     *  设置消息状态为已读
     */
    @GET("app/v1/zamh/readMessage")
    Observable<JsonObject> readMessage(@Query("id") String id);

    /**
     *  设置消息状态为已读
     */
    @GET("tztb/list")
    Observable<JsonObject> getNews(@Query("page") Integer page,@Query("pageSize") Integer pageSize);

    /**
     *  查询人员
     */
    @GET("phone/person/checkPersonBySFZ")
    Observable<JsonObject> querySfzh(@QueryMap Map<String,String> param);

    /**
     *  查询车辆
     */
    @GET("phone/car/checkCar")
    Observable<JsonObject> queryCar(@QueryMap Map<String,String> param);

    /**
     *  根据警种搜索
     *  警察
     * @see
     */
    @GET("app/v1/zamh/recommendApplicationByPoliceRole")
    Observable<JsonObject> recommendApplicationByPoliceRole(@Query("role") String role,@Query("applicationName")String applicationName);

    @POST("phone/car/saveCheckCarHistory")
    Observable<JsonObject> saveCheckCarHistory(@Body RequestBody body);

    /**
     * 查询 =通讯录
     */
    @GET("zatxl/list")
    Observable<JsonObject> getTxlData(@Query("sjgsdwId") String sjgsdwId,@Query("condition") String condition);

//    @GET()
//    Observable<JsonObject> getTxlData(@Url String url,@Query("sjgsdwId") String sjgsdwId,@Query("condition") String condition);

    /**
     * 获取督办单列表
     */
    @GET()
    Observable<JsonObject> getDbdList(@Url String url,@Query("gmsfhm") String gmsfhm,@Query("pageNo") String pageNo,@Query("pageSize") String pageSize);

    /**
     * 查询督办单详情
     */
    @GET()
    Observable<JsonObject> getDbdDetails(@Url String url,@Query("gmsfhm") String gmsfhm,@Query("id") String id);

    @GET()
    Observable<ResponseBody> downFile(@Url String url);

    /* 上传操作日志*/
    @POST
    Observable<JsonObject> uploadOperationLog(@Url String url, @Body RequestBody requestBody);

    // ======================  应用申请相关 =========================================================
    /**
     * 应用申请
     */
    @GET()
    Observable<JsonObject> applyLogin(@Url String url,@Query("policeNo") String policeNo);
    /**
     * 应用申请
     */
    @GET()
    Observable<JsonObject> applyGet(@Url String url,@HeaderMap Map<String,String> headMap, @QueryMap Map<String,Object> param);

    /* 上传操作日志*/
    @POST
    Observable<JsonObject> applyPost(@Url String url,@HeaderMap Map<String,String> headMap, @Body RequestBody requestBody);

    /* 上传操作日志*/
//    @FormUrlEncoded
//    @POST
//    Observable<JsonObject> applyPost(@Url String url, @FieldMap Map<String,Object> paramMap);


}
