package com.sheep.gamegroup.model.api;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sheep.gamegroup.absBase.IHomePageSearch;
import com.sheep.gamegroup.model.entity.BaseMessage;
import com.sheep.gamegroup.model.entity.CreateUserVideoReq;
import com.sheep.gamegroup.model.entity.UserFootprint;

import org.afinal.simplecache.ApiKey;

import java.util.Map;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Streaming;

/**
 * 暂时没接口
 * Created by ljy on 2018/3/8.
 */
public interface ApiService {
    @GET("/?app=ip.get&ip=8.8.8.8&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json")
    Observable<Object> getRetrofitData();

    //表格形式发送
    @FormUrlEncoded
    @POST("/")
    Call<Object> getTimeInfoPostForm(@FieldMap Map<String, String> map);

    /**
     * @param jsonObject
     * @return
     */
    @Streaming
    @POST("app/auth/sms_for_login/")
    Observable<BaseMessage> getCaptcha(@Body JSONObject jsonObject);

    @POST("app/auth/register_by_username/")
    Observable<BaseMessage> registerByUserName(@Body JSONObject jsonObject);

    @POST("app/auth/login_by_sms/")
    Observable<BaseMessage> loginByCaptcha(@Body JSONObject jsonObject);

    @POST("app/auth/login_by_username/")
    Observable<BaseMessage> loginByUserName(@Body JSONObject jsonObject);

    @PUT("app/user/change_password/")
    Observable<BaseMessage> changePassword(@Body JSONObject jsonObject);

    /**
     * @return 消息中心列表
     */
    @GET("app/message/system_notification/")
    Observable<BaseMessage> getMessageCenter(@Query("page") int page, @Query("per_page") int per_page, @Query("user_id") String user_id);

    /**
     * @param page            页数
     * @param per_page，每页显示条数
     * @return 回复互动列表
     */
    @GET("app/message/system_message/")
    Observable<BaseMessage> getMessageReply(@Query("page") int page, @Query("per_page") int per_page, @Query("user_id") String user_id);

    /**
     * @param id 回复互动id
     * @return 回复互动详情
     */
    @GET("app/message/system_message/{id}")
    Observable<BaseMessage> getMessageReplyItem(@Path("id") int id);

    /**
     * @param id 系统消息id
     * @return 消息中心详情
     */
    @GET("app/message/system_notification/{id}")
    Observable<BaseMessage> getSystemNotification(@Path("id") int id);

    /**
     * @return 获取未读消息条数 返回 0 或者 未读数量 大于零则有未读
     * 获取未读消息条数
     */
    @GET("app/message/system_message/no_read_num/")
    Observable<BaseMessage> getMessageUnReadNum(@Query("user_id") String user_id);

    /**
     * 获取邀请图片列表
     *
     * @return
     */
    @GET("app/user/promotions/")
    Observable<BaseMessage> getSharePicture();

    /**
     * @return ,
     * 会长推广显示游戏、现金任务、礼包
     */
    @GET("app/find/commend_app")
    Observable<BaseMessage> getCommendApp(@Query("game_id") String game_id, @Query("order") int order);

    /**
     * 查询用户是否可以弹窗推荐应用
     */
    @GET("app/find/can/commend_app")
    Observable<BaseMessage> canGetCommendApp(@Query("game_id") String game_id);

    /**
     * @return ,
     * 主页抢任务
     */
    @GET("app/release_task/commend_task/")
    Observable<BaseMessage> getNewTask(@Query("order") int order);

    /**
     * 获取用户信息
     */
    @GET("app/user/get_info/")
    Observable<BaseMessage> getInfo();

    /**
     * 获取用户的已经挂机微信
     */
    @GET("app/wechat/")
    Observable<BaseMessage> getWebchat();

    /**
     * 提交用户的微信账号与密码
     */
    @POST("app/wechat/")
    Observable<BaseMessage> postWebchat(@Body JSONObject jsonObject);

    /**
     * 提交用户的微信账号与密码
     */
    @PUT("app/wechat/{id}")
    Observable<BaseMessage> putWebchat(@Path("id") int id, @Body JSONObject jsonObject);

    /**
     * 获取微信挂机功能是否开启
     */
    @GET("app/wechat/is_open")
    Observable<BaseMessage> getWebchatIsOpen();

    /**
     * 用户提现
     * amount   type
     * type "体现渠道 1：微信 2：支付宝 3：手机充值"
     * now only 1：微信
     */
    @POST("app/withdraw/")
    Observable<BaseMessage> goWithdrawal(@Body JSONObject parame);

    /**
     * 提现绑定微信号
     */
    @GET("app/user/bind_wx/")
    Observable<BaseMessage> bindWeixin(@Query("code") String code);

    /**
     * 绑定账号
     */
    @PUT("app/user/bind_username/")
    Observable<BaseMessage> bindAccount(@Body JSONObject jsonObject);

    /**
     * 手机号召回密码：1.获取验证码
     */
    @POST("app/user/resetpass1/")
    Observable<BaseMessage> resetPass4Captcha(@Body JSONObject jsonObject);

    /**
     * 手机号召回密码：2.验证验证码
     */
    @POST("app/user/resetpass2/")
    Observable<BaseMessage> resetPass4Valid(@Body JSONObject jsonObject);

    /**
     * 手机号召回密码：3.设置新密码
     */
    @POST("app/user/resetpass3/")
    Observable<BaseMessage> resetPass4New(@Body JSONObject jsonObject);

    /**
     * 获取任务记录列表
     */
    @GET("app/accepted_task/")
    Observable<BaseMessage> acceptedTask(@Query("page") int page, @Query("per_page") int per_page, @Query("status") int status);

    /**
     * 领取任务
     */
    @POST("app/accepted_task/")
    Observable<BaseMessage> acceptedTask(@Body JSONObject param);

    /**
     * 获取自己正在运行的任务
     * show_game_task: 0 不显示游戏任务
     */
    @GET("app/accepted_task/new_run_task/")
    Observable<BaseMessage> returnTask(@Query("is_succession") int is_succession, @Query("show_game_task") int show_game_task);

    /**
     * 自动提交时长任务
     * <p>
     * "gps": "string",
     * "release_task_id": 0,
     * "task_time": 0
     */
    @POST("app/accepted_task/auto_check/")
    Observable<BaseMessage> commitAutoTask(@Body JSONObject param);

    /**
     * 获取未查看的任务成功或失败的记录
     */
    @GET("app/accepted_task/get_user_task_exists_new")
    Observable<BaseMessage> getUserTaskExistsNew();

    /**
     * 获取已经发布任务
     */
    @GET("app/release_task")
    Observable<BaseMessage> releaseTask(@Query("page") int page, @Query("per_page") int per_page,
                                        @Query("platform") int platform, @Query("is_hot") int is_hot,
                                        @Query("is_recommend") int is_recommend, @Query("about_to_begin") int about_to_begin,
                                        @Query("task_type") String task_type, @Query("is_succession") int is_succession);

    /**
     * 搜索游戏
     */
    @GET("app/release_task")
    Observable<BaseMessage> releaseTask(@Query("page") int page, @Query("per_page") int per_page,
                                        @Query("platform") int platform, @Query("is_hot") int is_hot,
                                        @Query("is_recommend") int is_recommend, @Query("about_to_begin") int about_to_begin,
                                        @Query("task_type") String task_type, @Query("is_succession") int is_succession, @Query("name") String name);


    /**
     * 邀请赚钱
     */
    @GET("app/auth/login_by_we_chat")
    Observable<BaseMessage> askMakeMoney(@Body String jsonObject);

    /**
     * 用户提现记录
     */
    @GET("app/withdraw/")
    Observable<BaseMessage> goWithdrawal(@Query("page") int page, @Query("per_page") int per_page, @Query("start_time") String start_time, @Query("end_time") String end_time);


    /**
     * 微信登录
     *
     * @param jsonObject
     */
    @POST("app/auth/login_by_we_chat")
    Observable<BaseMessage> LoginByWX(@Body com.alibaba.fastjson.JSONObject jsonObject);


    /**
     * qq登录
     *
     * @param jsonObject
     */
    @POST("app/auth/login_by_qq")
    Observable<BaseMessage> LoginByQQ(@Body com.alibaba.fastjson.JSONObject jsonObject);


    @GET("app/user/friend_count_and_award")
    Observable<BaseMessage> FriendCountAndAward();

    /**
     * 放弃任务
     */
    @PUT("app/accepted_task/give_up/")
    Observable<BaseMessage> giveUpTask(@Query("id") int id);

    /**
     * 获取任务显示状态
     */
    @GET("app/task_log/node/{id}")
    Observable<BaseMessage> giveTaskStatue(@Path("id") int id);


    /**
     * @param jsonObject
     * @return
     */
    @PUT("app/user/change_base_info")
    Observable<BaseMessage> changeBaseInfo(@Body com.alibaba.fastjson.JSONObject jsonObject);

    /**
     * @param jsonObject
     * @return 领红包
     */
    @POST("app/user/receive_red_packet")
    Observable<BaseMessage> exchangeRedPackage(@Query("invitation_code") String jsonObject);

    /**
     * 新手红包
     *
     * @return .
     */
    @POST("app/newbie_task/login_red_packet")
    Observable<BaseMessage> getNewRedPackage();

    /**
     * 更换手机号
     */
    @POST("app/user/switch_phone")
    Observable<BaseMessage> switchPhone(@Body JSONObject jsonObject);


    /**
     * 更换手机号
     */
    @PUT("app/user/bind_all_real_info")
    Observable<BaseMessage> bindALl(@Body JSONObject jsonObject);

    /**
     * 绑定手机号
     */
    @PUT("app/user/bind_mobile")
    Observable<BaseMessage> bindPhone(@Body JSONObject jsonObject);

    /**
     * 实时动态
     */
    @GET("app/user/award_detail")
    Observable<BaseMessage> awardDetail(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 发送绑定手机号短信，只传mobile
     */
    @POST("app/user/sms_for_bind_mobile")
    Observable<BaseMessage> smsBindMobile(@Body JSONObject jsonObject);

    /**
     * 使用第三方登录时，未找到该qq对应的账号，不再直接创建账号，会先绑定手机号来注册新账号
     * captcha	string
     * 验证码 第二步需要
     * mobile	string
     * platform	string
     * 登录返回来的platform
     * scope	string
     * 传kfzs为官包 传空为邀请包
     * step	string
     * 步骤：first发验证码 second绑定
     * token	string
     * 登录返回来的token
     */
    @POST("app/auth/bind_mobile")
    Observable<BaseMessage> bindMobileRegister(@Body JSONObject jsonObject);

    /**
     * 修改任务进度
     */
    @GET("app/accepted_task/status")
    Observable<BaseMessage> taskStatus(@Query("id") int id, @Query("screenshots") String screenshots,
                                       @Query("remark") String remark, @Query("package_name") String package_name, @Query("status") String status, @Query("device") String device);
    /**
     * 修改任务进度
     */
    @GET("app/accepted_task/status")
    Observable<BaseMessage> taskStatus(@Query("id") int id, @Query("screenshots") String screenshots,
                                       @Query("remark") String remark, @Query("package_name") String package_name, @Query("status") String status, @Query("device") String device, @Query("unique_identification") String unique_identification);
//    @GET("app/accepted_task/status")
//    Observable<BaseMessage> taskStatus(@Body JSONObject jsonObject);

    /**
     * 下载任务回调
     *
     * @param jsonObject
     * @return
     */
    @PUT("app/accepted_task/download_task_notify/")
    Observable<BaseMessage> taskDownloadNotify(@Body JSONObject jsonObject);

    /**
     * 获取可用余额
     *
     * @return
     */
    @GET("app/user/get_can_withdraw_amount")
    Observable<BaseMessage> getCanWithdrawAmount();

    @GET("loan/userRecord")
    Observable<BaseMessage> userRecord();

    @GET("loan/getYinkerLoanUrl")
    Observable<BaseMessage> getYinkerLoanUrl();

    @GET("loan/getYinkerRepaymentUrl")
    Observable<BaseMessage> getYinkerRepaymentUrl();


    /**
     * 统计数据
     */
    @POST("app/event_tracking")
    Observable<BaseMessage> appEventTracking(@Body JSONObject jsonObject);

    @GET("app/newbie_task")
    Observable<BaseMessage> getNewbieTask();

    @PUT("app/newbie_task")
    Observable<BaseMessage> putNewbieTask(@Body JSONObject jsonObject);

    @POST("app/newbie_task/learn_finish")
    Observable<BaseMessage> appNewbieTaskLearnFinish();

    @GET("app/user/friend_list")
    Observable<BaseMessage> getUserFriendList(@Query("page") int page, @Query("per_page") int per_page);

    @GET("app/release_task/credit_card")
    Observable<BaseMessage> getReleaseTaskCreditCard();

    @POST("app/accepted_task/credit_card")
    Observable<BaseMessage> releaseTaskCreditCard(@Body JSONObject jsonObject);

    @PUT("app/accepted_task/{id}/credit_card")
    Observable<BaseMessage> releaseTaskCreditCard(@Path("id") int id, @Body JSONObject jsonObject);

    /**
     * 首页轮播图
     */
    @GET("app/slideshow")
    Observable<BaseMessage> slideshow(@Query("platform") int platform);

    /**
     * 首页公告
     */
    @GET("app/bulletin")
    Observable<BaseMessage> bulletin(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 获取微信辅助h5链接
     */
    @GET("qr/task/get_url")
    Observable<BaseMessage> wxfzGetUrl();

    /**
     * 获取任务详情
     */
    @GET("app/release_task/{id}/desc")
    Observable<BaseMessage> taskDesc(@Path("id") int id);

    @GET("app/credit/{id}")
    Observable<BaseMessage> getCredit(@Path("id") int id);

    @POST("app/newbie_task/add_qq")
    Observable<BaseMessage> newbieTaskAddQq(@Body JSONObject jsonObject);

    @GET("app/accepted_task/get_schedule_list")
    Observable<BaseMessage> getCreditCardScheduleList();

    /**
     * 获取提现金额
     */
    @GET("app/withdraw_amount_option")
    Observable<BaseMessage> getWithdrawAmountOption();

    /**
     * 任务类型
     */
    @GET("app/release_task/get_child_task")
    Observable<BaseMessage> getChildTask(@Query("id") int id);


    /**
     * 获取我的资产
     */
    @GET("app/user/my_assets")
    Observable<BaseMessage> getMyAssets();

    /**
     * 充值记录
     */
    @GET("app/recharge/recharge_balance_log")
    Observable<BaseMessage> getRechargeBalanceLog(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 充值q币记录
     */
    @GET("app/recharge/recharge_qq_log")
    Observable<BaseMessage> getRechargeQQLog(@Query("page") int page, @Query("per_page") int per_page);


    /*****div***/

    /**
     * 获取下发充值类型
     *
     * @param page
     * @return
     */
    @GET("app/recharge/pay_way")
    Observable<BaseMessage> getRechargePayway(@Query("type") String page);

    /**
     * 充值
     *
     * @param jsonObject
     * @return
     */
    @POST("app/recharge/recharge_balance")
    Observable<BaseMessage> getRechargeBalance(@Body JSONObject jsonObject);


    /**
     * 绵羊币充值
     *
     * @param parame
     * @return
     */
    @POST("app/recharge/recharge_qq_coin")
    Observable<BaseMessage> goRechargeQ(@Body JSONObject parame);

    /*****div***/

    /**
     * 关于我们
     */
    @GET("app/about_us")
    Observable<BaseMessage> aboutUs();

    /**
     * 首页list
     */
    @GET(ApiKey.home_list)
    Observable<BaseMessage> homeList();

    /**
     * 已经反馈
     */
    @POST("app/feedback")
    Observable<BaseMessage> feedback(@Body JSONObject jsonObject);

    /**
     * 获取协议
     */
    @GET("app/user/agreement/")
    Observable<BaseMessage> getAgreement();

    /**
     * 提交协议
     */
    @POST("app/user/agreement_back/")
    Observable<BaseMessage> agreementBack(@Body JSONArray jsonArray);


    /**
     * 获取累计打卡记录
     * 1当月 2上个月 3上上个月
     */
    @GET("app/punch/punch_log/{action}")
    Observable<BaseMessage> getPunchLog(@Path("action") int action);

    /**
     * 获取所有打卡记录
     */
    @GET("app/punch/all_punch_log")
    Observable<BaseMessage> getAllPunchLog(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 获取连续打卡记录
     */
    @GET("app/punch/continue_punch_top")
    Observable<BaseMessage> getContinuePunchTop();

    /**
     * 获取累计打卡记录
     */
    @GET("app/punch/total_punch_top")
    Observable<BaseMessage> getTotalPunchTop();

    /**
     * 获取我的战绩上面的数据
     */
    @GET("app/punch/statistics")
    Observable<BaseMessage> getStatistics();


    /**
     * 打卡
     */
    @PUT("app/punch")
    Observable<BaseMessage> getPunch();

    /**
     * 一元报名
     */
    @POST("app/punch")
    Observable<BaseMessage> getPunchUp();

    /**
     * 获取可以得道的奖励
     */
    @GET("app/punch/award")
    Observable<BaseMessage> getPunchAward();

    /**
     * 获取是否可以打卡 1未报名 2已打卡 3可以打卡
     */
    @GET("app/punch/can_punch")
    Observable<BaseMessage> getPunchCanpunch();

    /**
     * 判断今日是否能报名 true可以 false不可以
     */
    @GET("app/punch/can_sign_up")
    Observable<BaseMessage> getPunchCanSignUp();

    /**
     * 获取可打卡和报名人数
     */
    @GET("app/punch/punch_and_sign_count")
    Observable<BaseMessage> getPunchAndSignCount();

    /**
     * 获取今日之星数据
     */
    @GET("app/punch/star")
    Observable<BaseMessage> getPunchStar();

    /**
     * 获取广告类型 1:开屏广告 2：弹窗广告
     */
    @GET("app/advertising/advertisements")
    Observable<BaseMessage> getAdvertising(@Query("type") int type);

    /**
     * 新功能介绍
     */
    @GET("app/version/new_features")
    Observable<BaseMessage> getVersionInfo(@Query("version_number") String version_number);

    /**
     * 检查用户是否需要设置标签
     */
    @GET("app/user/check_label")
    Observable<BaseMessage> checkLabel();

    /**
     * 查询标签列表
     */
    @GET("app/user/label")
    Observable<BaseMessage> getLabelList();

    /**
     * 查询标签列表
     */
    @POST("app/user/label")
    Observable<BaseMessage> postLabelList(@Body JSONObject jsonObject);

    /**
     * 关于我们
     */
    @GET("app/about_us/new_about_us")
    Observable<BaseMessage> getNewAboutUs();

    /**
     * 获取定向消费游戏列表
     */
    @GET("app/game_consumption/my_games")
    Observable<BaseMessage> getMyGames(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 获取定向消费游戏
     */
    @GET("app/game_consumption/my_game/{id}")
    Observable<BaseMessage> getMyGame(@Path("id") String third_task_id);

    /**
     * 获取正在运行的游戏任务
     */
    @GET("app/accepted_task/run_game_task")
    Observable<BaseMessage> run_game_task();

    /**
     * 领取游戏任务奖励
     */
    @PUT("app/accepted_task/receive_award/{id}")
    Observable<BaseMessage> receive_award(@Path("id") int id);

    /**
     * 游戏消费下单
     */
    @POST("app/game_consumption")
    Observable<BaseMessage> game_consumption(@Body JSONObject jsonObject);

    /**
     * 能用的绵羊币金额
     */
    @GET("app/game_consumption/can_user_sheep_amount")
    Observable<BaseMessage> can_user_sheep_amount(@Query("amount") int amount, @Query("game_id") String game_id);

    /**
     * url配置
     */
    @GET("app/url/")
    Observable<BaseMessage> getNameUrl();

    /**
     * 充值订单列表
     *
     * @return
     */
    @GET("app/game_consumption/orders")
    Observable<BaseMessage> getConsumptionOrders(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 再次充值 或 放弃充值
     *
     * @return
     */
    @PUT("app/game_consumption/order/{id}")
    Observable<BaseMessage> gameTaskPayOrGiveUp(@Path("id") int id, @Body JSONObject jsonObject);

    /**
     * 获取最新版本信息
     *
     * @return
     */
    @GET("app/version/new_version")
    Observable<BaseMessage> getNewVersion(@Query("type") int type);

    /**
     * 获取接收任务详情
     *
     * @return
     */
    @GET("app/accepted_task/detail/{id}")
    Observable<BaseMessage> getAcceptedTaskDetail(@Path("id") int id);

    /**
     * 用户统计分析--id事件
     */
    @POST("app/event_tracking/userBehavior")
    Observable<BaseMessage> commitIdEvent(@Body JSONObject jsonObject);

    /**
     * 闲玩
     */
    @GET("app/common_config")
    Observable<BaseMessage> commonConfig(@Query("type_name") String type_name);

    /**
     * 获取用户当前代理信息
     */
    @GET("app/agent/region")
    Observable<BaseMessage> agentRegion();

    /**
     * 收支明细
     */
    @GET("app/user/recharge_log")
    Observable<BaseMessage> rechargeLog(@Query("page") int page, @Query("per_page") int per_page);


    /**
     * 获取标签列表
     */
    @GET("app/find/articles_tags/list")
    Observable<BaseMessage> getFindTagList();

    /**
     * 发现模块列表
     */
    @GET("app/find/articles/list")
    Observable<BaseMessage> getFindList(@Query("page") int page, @Query("per_page") int per_page, @Query("tag_id") int id);

    /**
     * 发现内容详情
     */
    @GET("app/find/articles")
    Observable<BaseMessage> getFindDetail(@Query("id") int id);

    /**
     * 应用评分
     * {
     * "application_id": 0,
     * "score": 0,
     * "user_id": 0
     * }
     */
    @POST("app/find/applications/score")
    Observable<BaseMessage> commitAppScore(@Body JSONObject jsonObject);

    /**
     * 获取应用详情
     */
    @GET("app/find/applications")
    Observable<BaseMessage> getAppDetail(@Query("id") int id);

    /**
     * 应用 各评分人数
     */
    @GET("app/find/applications/score_num")
    Observable<BaseMessage> getAppScoreNum(@Query("id") int id);

    /**
     * 应用我的评分
     */
    @GET("app/find/applications/my_score")
    Observable<BaseMessage> getMyAppScore(@Query("id") int id);

    /**
     * 应用 下载/预约 时先调用此接口生成记录
     */
    @GET("app/find/applications/downloads")
    Observable<BaseMessage> recordAppDownloads(@Query("id") int id);

    /**
     * 取消  应用 下载/预约
     */
    @DELETE("app/find/applications/downloads")
    Observable<BaseMessage> deleteDownloads(@Query("id") int id);

    /**
     * 获取预约未下载数量
     */
    @GET("app/find/applications/downloads/status")
    Observable<BaseMessage> getFindAppDownloadsStatus();

    /**
     * 获取预约下载列表
     */
    @GET("app/find/applications/downloads_list")
    Observable<BaseMessage> getFindAppReservationList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 发现点击统计
     */
    @GET("app/find/add_clicks")
    Observable<BaseMessage> getFindItemAddClicks(@Query("id") int id);

    /**
     * 首页list
     */
    @GET("app/home_list/{id}")
    Observable<BaseMessage> getHomeListItem(@Path("id") int id);

    /**
     * 获取游戏任务下拉列表
     */
    @GET("app/release_task/recharge_game_List")
    Observable<BaseMessage> rechargeGameList(@Query("task_type") int task_type, @Query("name") String name);

    /**
     * 领取游戏账号
     */
    @PUT("app/game_account/{task_id}")
    Observable<BaseMessage> gameAccountManager(@Path("task_id") int task_id);

    /**
     * 创建游戏账号
     */
    @POST("app/game_account/add")
    Observable<BaseMessage> addGameAccount(@Body JSONObject jsonObject);

    /**
     * 删除游戏账号
     */
    @DELETE("app/game_account/del/{id}")
    Observable<BaseMessage> delGameAccount(@Path("id") int id);

    /**
     * 编辑游戏账号密码
     */
    @PUT("app/game_account/edit")
    Observable<BaseMessage> editGameAccount(@Body JSONObject jsonObject);

    /**
     * 查询游戏账号详情
     */
    @GET("app/game_account/detail/{id}")
    Observable<BaseMessage> getGameAccountDetail(@Path("id") int id);

    /**
     * 获取平台对应的游戏
     * task_type：1002平台游戏，1003 腾讯游戏，1004 小米游戏
     */
    @GET("app/game_account/game/list")
    Observable<BaseMessage> getGameList(@Query("game_type") int game_type);

    /**
     * 查询游戏账号
     * task_type：1002平台游戏，1003 腾讯游戏，1004 小米游戏
     */
    @GET("app/game_account/account/list")
    Observable<BaseMessage> getGameAccountList(@Query("game_type") int game_type, @Query("account") String account, @Query("task_id") int task_id);

    /**
     * 查询所有游戏账号
     * task_type：1002平台游戏，1003 腾讯游戏，1004 小米游戏
     */
    @GET("app/game_account/all/list")
    Observable<BaseMessage> getGameAccountAllList();

    /**
     * 获取计算可用定向消费券的数据
     */
    @GET("app/game_consumption/voucher_and_ratio")
    Observable<BaseMessage> getVoucherAndRatio(@Query("game_id") String game_id);

    /**
     * 获取任务
     */
    @GET("app/release_task/game_task")
    Observable<BaseMessage> releaseGameTask(@Query("page") int page, @Query("per_page") int per_page, @Query("is_hot") int is_hot, @Query("task_type") String task_type, @Query("name") String name);

    /**
     * 获取小米游戏列表
     * platform 1：安卓 2：IOS
     * download_type  1：非预约下载 2：预约下载
     */
    @GET("app/xiaomi/list")
    Observable<BaseMessage> xiaomiGameList(@Query("page") int page, @Query("per_page") int per_page, @Query("platform") int platform, @Query("download_type") int download_type, @Query("name") String name);

    /**
     * 领取小米游戏账号
     */
    @POST("app/xiaomi/Receive")
    Observable<BaseMessage> receiveXiaomiAccount(@Body JSONObject id);

    /**
     * 获取邀请用户排名
     */
    @GET("app/user/invitation_top")
    Observable<BaseMessage> getInvitationTop(@Query("top") int top, @Query("start_time") long start_time, @Query("end_time") long end_time);//top默认为5，可以不传

    /**
     * 获取邀请用户进两月礼物发放记录
     */
    @GET("app/user/invitation_top_record")
    Observable<BaseMessage> getInvitationTopRecord();

    /**
     * 获取用户未做金额
     * can_receive_awar
     */
    @GET("app/user/can_receive_award")
    Observable<BaseMessage> getCanReceiveAward();

    /**
     * 任务审核
     * accepted_task/static_audit
     */
    @GET("app/accepted_task/static_audit")
    Observable<BaseMessage> staticAudit();

    /**
     * 唤醒业务APP列表
     */
    @GET("app/awaken/app")
    Observable<BaseMessage> awakenApp(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 唤醒业务APP列表
     */
    @GET("app/awaken/article")
    Observable<BaseMessage> awakenApparticle(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 唤醒业务APP
     */
    @GET("app/awaken/article/{id}")
    Observable<BaseMessage> awakenAppArticle(@Path("id") int id);

    /**
     * 唤醒业务打开app内容成功后回调
     */
    @POST("app/awaken/detail")
    Observable<BaseMessage> awakenDetail(@Body JSONObject jsonObject);

    /**
     * 游戏礼包
     */
    @GET("app/gift_bag")
    Observable<BaseMessage> getGiftBagList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 我的福利——我的礼包
     */
    @GET("app/gift_bag/my_gift_bag")
    Observable<BaseMessage> getMyGiftBagList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 领取礼包
     */
    @PUT("app/gift_bag/receive/{id}")
    Observable<BaseMessage> receiveGiftBag(@Path("id") int id);

    /**
     * 获取热门福利
     */
    @GET("app/release_task/hot_welfare")
    Observable<BaseMessage> getHotWelfareList(/*@Query("page") int page, @Query("per_page") int per_page*/);

    /**
     * 下载福利
     */
    @GET("app/release_task/down_welfare")
    Observable<BaseMessage> getDownWelfareList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 我的福利——下载福利
     */
    @GET("app/game_consumption/my_voucher")
    Observable<BaseMessage> getMyWelfareList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 我的福利——使用记录
     */
    @GET("app/game_consumption/voucher_use_log")
    Observable<BaseMessage> getMyWelfareLogList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 绑定qq或微信
     */
    @PUT("app/user/bind_third")
    Observable<BaseMessage> bindThird(@Body JSONObject jsonObject);

    /**
     * 换绑qq或微信
     */
    @PUT("app/user/modify_third")
    Observable<BaseMessage> modifyThird(@Body JSONObject jsonObject);

    /**
     * 发送/校验换绑验证码
     */
    @POST("app/user/modify_third_sms")
    Observable<BaseMessage> modifyThirdSms(@Body JSONObject jsonObject);

    /**
     * 检查是否需要输入邀请码
     */
    @GET("app/auth/need_code")
    Observable<BaseMessage> needCode(@Query("mobile") String mobile);
//---------------------------start 玩转游戏------------------------------

    /**
     * 玩转游戏——每日必玩
     * 玩转游戏——近期最热
     * is_hot:1  others:0
     * daily_play:1每日必玩
     * type: 1002：快发出包 1003：腾讯出包 1004：小米出包 1099：其他
     */
    @GET("app/find")
    Observable<BaseMessage> getPlayGameList(@Query("page") int page, @Query("per_page") int per_page, @QueryMap Map<String, Object> map);

    /**
     * 玩转游戏-获取主页游戏数据 猜你喜欢
     */
    @GET("app/find/recommend/user_like")
    Observable<BaseMessage> getUserLikeList();

    /**
     * 玩转游戏-获取主页游戏数据 1:天天更新 2:重点推荐
     * display_type
     * integer
     * (query)
     * 1:天天更新 2:重点推荐
     */
    @GET("app/find/recommend")
    Observable<BaseMessage> getRecommendList(@Query("display_type") int display_type);

    /**
     * 玩转游戏-获取主页游戏数据 1:天天更新 2:重点推荐 更多
     * display_type
     * integer
     * (query)
     * 1:天天更新 2:重点推荐
     */
    @GET("app/find/recommend/list")
    Observable<BaseMessage> getRecommendListMore(@Query("display_type") int display_type);

    /**
     * 玩转游戏-获取主页 获取标签列表
     */
    @GET("app/find/game/tags")
    Observable<BaseMessage> getGameTagList();

    /**
     * 玩转游戏-游戏详情 相关游戏
     * app_id 应用的id
     */
    @GET("app/find/detail/relevant_games")
    Observable<BaseMessage> getDetailRelevantGames(@Query("app_id") int app_id);

    /**
     * 玩转游戏-游戏详情 热门试玩
     * app_id 应用的id
     */
    @GET("app/find/detail/hot_games")
    Observable<BaseMessage> getDetailHotGames(@Query("app_id") int app_id);

    /**
     * 玩转游戏-游戏详情 活动推荐
     * app_id 应用的id
     */
    @GET("app/find/detail/activity_recommend")
    Observable<BaseMessage> getDetailActivityRecommend(@Query("app_id") int app_id);

    /**
     * 玩转游戏-游戏详情 文章推荐
     * app_id 应用的id
     */
    @GET("app/find/detail/article_recommend")
    Observable<BaseMessage> getDetailArticleRecommend(@Query("app_id") int app_id);

    //---------------------------start game_user------------------------------

    /**
     * 查询应用评论列表
     * CommentType       int8    `description:"评论类型 1：游戏 2：资讯" json:"comment_type"`
     * app_id * integer (query)	应用id
     * page_no  integer (query) 页码
     * page_size  integer (query) 每页显示条数默认10条
     */
    @GET("app/game_user/app_comment_list")
    Observable<BaseMessage> getGameUserAppCommentList(@Query("page_no") int page_no, @Query("page_size") int page_size, @Query("app_id") int app_id, @Query("comment_type") int comment_type);

    /**
     * 查询应用评分详情
     * app_id * integer (query)	应用id
     */
    @GET("app/game_user/app_score_detail")
    Observable<BaseMessage> getGameUserAppScoreDetail(@Query("app_id") int app_id);

    /**
     * 查询用户主页评论列表
     * focus_user_id  integer (query) 关注用户id
     * page_no  integer (query) 页码
     * page_size  integer (query) 每页显示条数默认10条
     */
    @GET("app/game_user/comment_list")
    Observable<BaseMessage> getGameUserCommentList(@Query("page_no") int page_no, @Query("page_size") int page_size, @Query("focus_user_id") int focus_user_id);

    /**
     * 查询用户主页详情
     * focus_user_id * integer (query)	关注用户id
     */
    @GET("app/game_user/detail")
    Observable<BaseMessage> getGameUserDetail(@Query("focus_user_id") int focus_user_id);

    /**
     * 关注游戏
     * focus_game_id  * integer (query)	关注应用id
     */
    @POST("app/game_user/focus_game")
    Observable<BaseMessage> postGameUserFocusGame(@Query("focus_game_id") int focus_game_id);

    /**
     * 关注用户
     * focus_user_id * integer (query)	关注用户id
     */
    @POST("app/game_user/focus_user")
    Observable<BaseMessage> postGameUserFocusUser(@Query("focus_user_id") int focus_user_id);
    /**
     * 热门用户列表
     * page * integer (query) 页码
     * per_page * integer (query) 每页显示条数默认10条
     */
    @GET(ApiKey.getGameUserUserFocusHotUser)
    Observable<BaseMessage> getGameUserUserFocusHotUser(@Query("page") int page, @Query("per_page") int per_page);
    /**
     * 关注的用户列表
     * page * integer (query) 页码
     * per_page * integer (query) 每页显示条数默认10条
     */
    @GET(ApiKey.getGameUserUserFocusList)
    Observable<BaseMessage> getGameUserUserFocusList(@Query("page") int page, @Query("per_page") int per_page);
    /**
     * 关注的游戏列表
     * page * integer (query) 页码
     * per_page * integer (query) 每页显示条数默认10条
     */
    @GET(ApiKey.getGameUserGameFocusList)
    Observable<BaseMessage> getGameUserGameFocusList(@Query("page") int page, @Query("per_page") int per_page);

    /**
     * 查询最近在玩以及同类型游戏
     * focus_user_id * integer (query)	关注用户id
     */
    @GET("app/game_user/lately_game")
    Observable<BaseMessage> getGameUserLatelyGame(@Query("focus_user_id") int focus_user_id);

    /**
     * 用户主页点赞
     * focus_user_id * integer (query)	关注用户id
     */
    @POST("app/game_user/like")
    Observable<BaseMessage> postGameUserLike(@Query("focus_user_id") int focus_user_id);

    /**
     * 回复用户评论
     * ReplyUserCommentReq{
     * content:	string  评论内容
     * user_comment_reply_id:	integer ($int64) 回复id
     * }
     */
    @POST("app/game_user/reply_comment")
    Observable<BaseMessage> postGameUserReplyComment(@Body JSONObject jsonObject);

    /**
     * 查询用户主页回复列表
     * focus_user_id  integer (query) 关注用户id
     * page_no  integer (query) 页码
     * page_size  integer (query) 每页显示条数默认10条
     */
    @GET("app/game_user/reply_list")
    Observable<BaseMessage> getGameUserReplyList(@Query("page_no") int page_no, @Query("page_size") int page_size, @Query("focus_user_id") int focus_user_id);

    /**
     * 用户评论用户
     * UserCommentReq{
     * content:	string  评论内容
     * user_comment_id:	integer ($int64) 评论id
     * }
     */
    @POST("app/game_user/user_comment")
    Observable<BaseMessage> postGameUserUserComment(@Body JSONObject jsonObject);

    /**
     * 查询用户评论详情
     * user_comment_id  integer (query) 评论id
     * page_no  integer (query) 页码
     * page_size  integer (query) 每页显示条数默认10条
     */
    @GET("app/game_user/user_comment_detail")
    Observable<BaseMessage> getGameUserUserCommentDetail(@Query("page_no") int page_no, @Query("page_size") int page_size, @Query("user_comment_id") int user_comment_id);

    /**
     * 用户评论用户点赞
     * user_comment_reply_id * integer (query) 回复id
     */
    @POST("app/game_user/user_comment_like")
    Observable<BaseMessage> postGameUserUserCommentLike(@Query("user_comment_reply_id") int user_comment_reply_id);

    /**
     * 用户游戏评论
     * GameCommentReq{
     * CommentType       int8    `description:"评论类型 1：游戏 2：资讯" json:"comment_type"`
     * app_id:	integer ($int64) 应用id
     * content:	string 评论内容
     * score:	integer ($int32) 评分 1-10
     * }
     */
    @POST("app/game_user/user_game_comment")
    Observable<BaseMessage> postGameUserUserGameComment(@Body JSONObject jsonObject);

    /**
     * 用户游戏评论表情点赞
     * user_comment_id * integer (query) 评论id
     */
    @POST("app/game_user/user_game_comment_expression_like")
    Observable<BaseMessage> postGameUserUserGameCommentExpressionLike(@Query("user_comment_id") int user_comment_id);

    /**
     * 用户游戏评论点赞
     * user_comment_id * integer (query) 评论id
     */
    @POST("app/game_user/user_game_comment_like")
    Observable<BaseMessage> postGameUserUserGameCommentLike(@Query("user_comment_id") int user_comment_id);
    //---------------------------end game_user------------------------------
//---------------------------end 玩转游戏------------------------------

    /**
     * type: 1002：快发出包 1003：腾讯出包 1004：小米出包
     */
    @GET("app/find")
    Observable<BaseMessage> searchApp(@Query("page") int page, @Query("per_page") int per_page, @Query("name") String name, @Query("type") int type);

    /**
     * platform 平台 1：andriod 2：ios
     *
     * @return
     */
    @GET("app/game_banner")
    Observable<BaseMessage> gameBanner(@Query("platform") int platform);

    /**
     * platform 平台 1：andriod 2：ios
     * 获取游戏中心主页活动数据
     */
    @GET("app/game_banner/activity?platform=1")
    Observable<BaseMessage> gameBannerAct();

    /**
     * 游戏详情
     *
     * @return
     */
    @GET("app/find/{id}")
    Observable<BaseMessage> playGameDetail(@Path("id") int id);

    /**
     * 判断是否是第一次运行的设备
     *
     * @return
     */
    @GET("app/event_tracking/check_user_first")
    Observable<BaseMessage> checkUserFirst();

    /**
     * 查询用户截图加密开关
     *
     * @return
     */
    @GET("app/common_config/need_shot_screen")
    Observable<BaseMessage> needShotScreen();
    //移动积分兑换
//    http://10.8.220.237:8010/v1/app/mobile_point/goods    获取商品列表  get
//    http://10.8.220.237:8010/v1/app/mobile_point/score    获取用户积分 post
//    http://10.8.220.237:8010/v1/app/mobile_point/sms      获取短信验证码 post
//    http://10.8.220.237:8010/v1/app/mobile_point/recharge 兑换积分 post

    /**
     * 获取商品列表
     *
     * @return
     */
    @GET("app/mobile_point/goods")
    Observable<BaseMessage> getCMCCGoods();

    /**
     * 获取用户积分
     *
     * @return
     */
    @POST("app/mobile_point/score")
    Observable<BaseMessage> getCMCCScore(@Body JSONObject jsonObject);

    /**
     * 获取短信验证码
     *
     * @return
     */
    @POST("app/mobile_point/sms")
    Observable<BaseMessage> smsCMCC(@Body JSONObject jsonObject);

    /**
     * 兑换积分
     */
    @POST("app/mobile_point/recharge")
    Observable<BaseMessage> rechargeCMCC(@Body JSONObject jsonObject);
//---------------------------start 个人中心-------------------------------------

    /**
     * 用户中心模块获取
     */
    @GET(ApiKey.user_module)
    Observable<BaseMessage> getUserModule();

    /**
     * 新手引导
     */
    @GET(ApiKey.novice_guidance)
    Observable<BaseMessage> getNoviceGuidance();

//---------------------------end 个人中心-------------------------------------
//---------------------------start 签到-------------------------------------

    /**
     * 签到状态获取
     */
    @GET("app/user_sign/signs")
    Observable<BaseMessage> getUserSignSigns();
    /**
     * 获取下次刮奖金额
     */
    @GET("app/user_sign/scratch_amount")
    Observable<BaseMessage> getUserSignScratch_amount();
    /**
     * 获取最后一次刮奖结果
     */
    @GET("app/user_sign/last_scratch")
    Observable<BaseMessage> getUserSignLastScratch();
    /**
     * 每日签到
     */
    @POST("app/user_sign/sign_in")
    Observable<BaseMessage> postUserSignSignIn();
    /**
     * 分享
     */
    @POST("app/user_sign/share")
    Observable<BaseMessage> postUserSignShare();

    /**
     * 补签
     * date * string (query)	 补签日期
     * day * integer (query)	 补签周次
     */
    @POST("app/user_sign/sign_in_supplement")
    Observable<BaseMessage> postUserSignSignInSupplement(@Query("date") String date, @Query("day") int day);

    /**
     * 刮奖
     */
    @POST("app/user_sign/scratch_card")
    Observable<BaseMessage> postUserSignScratchCard();
//---------------------------end 签到-------------------------------------
//---------------------------start 搜索相关-------------------------------------

    /**
     * 获取搜索相关热门推荐
     * platform * integer (query) 平台 0全 1android 2ios
     */
    @GET(ApiKey.top_search_statistics)
    Observable<BaseMessage> getTopSearchStatistics();

    /**
     * 点击热门搜索后，统计点击次数
     * link_id * integer (query) 关联id
     * link_type * integer (query) 关联类型 1任务 2游戏
     */
    @POST("app/top_search_statistics/click_top_search")
    Observable<BaseMessage> postTopSearchStatisticsClickTopSearch(@Query("link_id") int link_id, @IHomePageSearch.LINK_TYPE @Query("link_type") int link_type);
    /**
     * 根据任务名（游戏名）模糊搜索
     * search_content * string (query) 任务名（游戏名）
     */
    @GET("app/top_search_statistics/home_page_search")
    Observable<BaseMessage> getTopSearchStatisticsHomePageSearch(@Query("search_content") String search_content);


//---------------------------end 搜索相关-------------------------------------
//---------------------------start 游戏sdk相关接口-------------------------------------

    /**
     * 请求授权
     *
     * @return
     */
    @GET("app/sdk/{game_key}")
    Observable<BaseMessage> verificationAuth(@Header("Authorization") String token, @Path("game_key") String game_key);

    /**
     * 绵羊币支付订单查询接口
     */
    @GET("app/sdk/find/order")
    Observable<BaseMessage> sdkFindOrder(@Header("Authorization") String token, @Query("order_no") String order_no);

    /**
     * 绵羊币支付sdk订单
     */
    @POST("app/sdk/pay/order")
    Observable<BaseMessage> sdkPayOrder(@Header("Authorization") String token, @Query("order_no") String out_trade_no);
//---------------------------end 游戏sdk相关接口-------------------------------------

//---------------------------start 有米科技相关接口-------------------------------------

    /**
     * 获取有米积分余额
     *
     * @return
     */
    @GET("youmi/youmi_total_price")
    Observable<BaseMessage> getYmTotalPrice(@Query("uid") String uid);
//---------------------------end 有米科技相关接口-------------------------------------
//---------------------------start 小绵羊3.4.5 足迹-------------------------------------

    /**
     * 添加用户足迹/用户浏览记录
     * UserFootprint
     */
    @POST("app/user/add_user_footprint")
    Observable<BaseMessage> postUserAddUserFootPrint(@Body UserFootprint UserFootprint);
    /**
     * 小绵羊3.4.5
     * 查询足迹/我的足迹
     * page * integer (query) 页码
     * per_page * integer (query) 每页显示条数默认10条
     * date string (query) 日期,如: 2018-11-11
     */
    @GET(ApiKey.getUserFootPrintList)
    Observable<BaseMessage> getUserFootPrintList(@Query("page") int page, @Query("per_page") int per_page, @Query("date") String date);
    /**
     * 小绵羊3.4.5
     * 查询足迹/我的足迹日期数量列表
     * start_date * string (query)	 查询开始日期年月,如: 2018-11-01
     * end_date * string (query) 查询结束日期年月,如: 2018-11-30
     */
    @GET(ApiKey.getUserFootPrintDateCount)
    Observable<BaseMessage> getUserFootPrintDateCount(@Query("start_date") String start_date, @Query("end_date") String end_date);
//---------------------------end 小绵羊3.4.5 足迹-------------------------------------
//---------------------------start 小绵羊3.4.5 分享-----------------------------------
    /**
     * 获取每日分享列表
     */
    @GET("app/share/shares")
    Observable<BaseMessage> getShareList();
    /**
     * 每日分享结果
     */
    @POST("app/share/share/")
    Observable<BaseMessage> sendShareResult(@Query("id") int id);
//---------------------------end 小绵羊3.4.5 分享-----------------------------------

//---------------------------start 小绵羊3.4.5 视频-------------------------------------

    /**
     * 小绵羊3.4.5新增 -- 用户视频发布
     * CreateUserVideoReq
     */
    @POST("app/video")
    Observable<BaseMessage> postVideo(@Body JSONObject jsonObject);
    /**
     * 小绵羊3.4.5新增 -- 查询视频详情
     * video_id * integer (query) 视频id
     */
    @GET("app/video/detail")
    Observable<BaseMessage> getVideoDetail(@Query("video_id") int video_id);
    /**
     * 小绵羊3.4.5新增 -- 视频点赞
     */
    @POST("app/video/like")
    Observable<BaseMessage> postVideoLike(@Query("video_id") int video_id);
    /**
     * 小绵羊3.4.5新增 -- 查询视频列表
     */
    @GET(ApiKey.getVideoList)
    Observable<BaseMessage> getVideoList(@Query("page_no") int page, @Query("page_size") int per_page);
    /**
     * 小绵羊3.4.5新增 -- 查询音乐列表
     */
    @GET(ApiKey.getVideoMusic)
    Observable<BaseMessage> getVideoMusic();
    /**
     * 小绵羊3.4.5新增 -- 视频分享回调
     */
    @POST("app/video/share")
    Observable<BaseMessage> postVideoShare(@Query("video_id") int video_id);
    /**
     * 小绵羊3.4.5新增 -- 查询贴纸列表
     */
    @GET(ApiKey.getVideoSticker)
    Observable<BaseMessage> getVideoSticker();
    /**
     * 小绵羊3.4.5新增 -- 获取七牛上传凭证
     */
    @GET("app/video/token")
    Observable<BaseMessage> getVideoToken();
    /**
     * 小绵羊3.4.5新增 -- 查询话题列表
     */
    @GET(ApiKey.getVideoTopic)
    Observable<BaseMessage> getVideoTopic();
//---------------------------end 小绵羊3.4.5 视频-------------------------------------

}
