package com.gh.gamecenter.retrofit.service;

import com.gh.common.filter.RegionSetting;
import com.gh.gamecenter.common.entity.IdfaData;
import com.gh.gamecenter.common.entity.LaunchRedirectWrapper;
import com.gh.gamecenter.common.entity.LinkEntity;
import com.gh.gamecenter.common.entity.OssEntity;
import com.gh.gamecenter.common.entity.PKEntity;
import com.gh.gamecenter.common.entity.SignatureEntity;
import com.gh.gamecenter.common.entity.ToolBoxEntity;
import com.gh.gamecenter.common.entity.WechatConfigEntity;
import com.gh.gamecenter.entity.ActivityLabelEntity;
import com.gh.gamecenter.entity.AdConfig;
import com.gh.gamecenter.entity.AddonsUnreadEntity;
import com.gh.gamecenter.entity.AmwayCommentEntity;
import com.gh.gamecenter.entity.AppEntity;
import com.gh.gamecenter.entity.ApplyModeratorStatusEntity;
import com.gh.gamecenter.entity.ArchiveEntity;
import com.gh.gamecenter.entity.AvatarBorderCategoryEntity;
import com.gh.gamecenter.entity.BadgeEntity;
import com.gh.gamecenter.entity.BlockEntity;
import com.gh.gamecenter.entity.BottomTab;
import com.gh.gamecenter.entity.CarouselEntity;
import com.gh.gamecenter.entity.CategoryEntity;
import com.gh.gamecenter.entity.CommonCollectionContentEntity;
import com.gh.gamecenter.entity.CommonCollectionEntity;
import com.gh.gamecenter.entity.DataUnionEntity;
import com.gh.gamecenter.entity.DefaultAvatar;
import com.gh.gamecenter.entity.DeviceDialogEntity;
import com.gh.gamecenter.entity.DialogEntity;
import com.gh.gamecenter.entity.DiscoveryGameCardEntity;
import com.gh.gamecenter.entity.DiscoveryGameCardLabel;
import com.gh.gamecenter.entity.DiverterEntity;
import com.gh.gamecenter.entity.FloatWindowSettingEntity;
import com.gh.gamecenter.entity.FollowCommonContentCollection;
import com.gh.gamecenter.entity.FollowDynamicEntity;
import com.gh.gamecenter.entity.FollowUserEntity;
import com.gh.gamecenter.entity.FollowersOrFansEntity;
import com.gh.gamecenter.entity.ForumActivityCategoryEntity;
import com.gh.gamecenter.entity.ForumActivityEntity;
import com.gh.gamecenter.entity.ForumBannerEntity;
import com.gh.gamecenter.entity.ForumDetailEntity;
import com.gh.gamecenter.entity.ForumEntity;
import com.gh.gamecenter.entity.ForumUnreadEntity;
import com.gh.gamecenter.entity.GameCollectionCoverEntity;
import com.gh.gamecenter.entity.GameCollectionListEntity;
import com.gh.gamecenter.entity.GameCollectionPlayerCreationEntity;
import com.gh.gamecenter.entity.GameCollectionTagEntity;
import com.gh.gamecenter.entity.GameColumnCollection;
import com.gh.gamecenter.entity.GameData;
import com.gh.gamecenter.entity.GameDigestEntity;
import com.gh.gamecenter.entity.GameGuidePopupEntity;
import com.gh.gamecenter.entity.GameServerTestTopGame;
import com.gh.gamecenter.entity.GameServerTestV2Entity;
import com.gh.gamecenter.entity.GameVideoInfo;
import com.gh.gamecenter.entity.GamesCollectionDetailEntity;
import com.gh.gamecenter.entity.GamesCollectionEntity;
import com.gh.gamecenter.entity.HaloAddonEntity;
import com.gh.gamecenter.entity.HomeGameCollectionEntity;
import com.gh.gamecenter.entity.HomeItemTestV2Entity;
import com.gh.gamecenter.entity.ImageInfoEntity;
import com.gh.gamecenter.entity.InterestedGameEntity;
import com.gh.gamecenter.entity.LibaoDetailEntity;
import com.gh.gamecenter.entity.MultiTabNav;
import com.gh.gamecenter.entity.MyVideoEntity;
import com.gh.gamecenter.entity.NewApiSettingsEntity;
import com.gh.gamecenter.entity.NewSettingsEntity;
import com.gh.gamecenter.entity.NewsDetailEntity;
import com.gh.gamecenter.entity.PackageFilter;
import com.gh.gamecenter.entity.PackageGame;
import com.gh.gamecenter.entity.PersonalHistoryEntity;
import com.gh.gamecenter.entity.PullDownPush;
import com.gh.gamecenter.entity.Rating;
import com.gh.gamecenter.entity.RatingComment;
import com.gh.gamecenter.entity.RatingDraftEntity;
import com.gh.gamecenter.entity.RatingReplyEntity;
import com.gh.gamecenter.entity.RecommendPopupEntity;
import com.gh.gamecenter.entity.ReserveModifyEntity;
import com.gh.gamecenter.entity.ReserveReminderEntity;
import com.gh.gamecenter.entity.SearchSubjectEntity;
import com.gh.gamecenter.entity.ServerPublishEntity;
import com.gh.gamecenter.entity.ServerSubscriptionEntity;
import com.gh.gamecenter.entity.ServerTestEntity;
import com.gh.gamecenter.entity.ServersGameCategory;
import com.gh.gamecenter.entity.SidebarsEntity;
import com.gh.gamecenter.entity.SignEntity;
import com.gh.gamecenter.entity.SpecialCatalogEntity;
import com.gh.gamecenter.entity.StartPointEntity;
import com.gh.gamecenter.entity.SubjectEntity;
import com.gh.gamecenter.entity.SubjectRefreshEntity;
import com.gh.gamecenter.entity.SubjectSettingEntity;
import com.gh.gamecenter.entity.TagEntity;
import com.gh.gamecenter.entity.TimeEntity;
import com.gh.gamecenter.entity.ToolBoxBlockEntity;
import com.gh.gamecenter.entity.UnifiedUserTrendEntity;
import com.gh.gamecenter.entity.UserAuthEntity;
import com.gh.gamecenter.entity.ValidateCodeRequest;
import com.gh.gamecenter.entity.ValidateCodeResponse;
import com.gh.gamecenter.entity.VersionVoteEntity;
import com.gh.gamecenter.entity.VideoDataOverViewEntity;
import com.gh.gamecenter.entity.VideoDraftEntity;
import com.gh.gamecenter.entity.VideoEntity;
import com.gh.gamecenter.entity.VideoTagEntity;
import com.gh.gamecenter.entity.VoteEntity;
import com.gh.gamecenter.entity.WhitePackageListEntity;
import com.gh.gamecenter.feature.entity.AliPayEntity;
import com.gh.gamecenter.feature.entity.AnswerEntity;
import com.gh.gamecenter.feature.entity.ApkEntity;
import com.gh.gamecenter.feature.entity.ArticleDraftEntity;
import com.gh.gamecenter.feature.entity.ArticleEntity;
import com.gh.gamecenter.feature.entity.AvatarBorderEntity;
import com.gh.gamecenter.feature.entity.BackgroundImageEntity;
import com.gh.gamecenter.feature.entity.BaseEntity;
import com.gh.gamecenter.feature.entity.BigEvent;
import com.gh.gamecenter.feature.entity.CommentEntity;
import com.gh.gamecenter.feature.entity.CommentnumEntity;
import com.gh.gamecenter.feature.entity.ConcernEntity;
import com.gh.gamecenter.feature.entity.FloatingWindowEntity;
import com.gh.gamecenter.feature.entity.ForumVideoEntity;
import com.gh.gamecenter.feature.entity.GameEntity;
import com.gh.gamecenter.feature.entity.LibaoEntity;
import com.gh.gamecenter.feature.entity.LibaoStatusEntity;
import com.gh.gamecenter.feature.entity.MessageDigestEntity;
import com.gh.gamecenter.feature.entity.MessageUnreadCount;
import com.gh.gamecenter.feature.entity.MessageUnreadEntity;
import com.gh.gamecenter.feature.entity.NewsEntity;
import com.gh.gamecenter.feature.entity.PersonalEntity;
import com.gh.gamecenter.feature.entity.QuestionDraftEntity;
import com.gh.gamecenter.feature.entity.ReserveOnlineEntity;
import com.gh.gamecenter.feature.entity.ServerCalendarEntity;
import com.gh.gamecenter.feature.entity.ServerCalendarFormEntity;
import com.gh.gamecenter.feature.entity.ServerCalendarGame;
import com.gh.gamecenter.feature.entity.ServerCalendarNotifySetting;
import com.gh.gamecenter.feature.entity.SettingsEntity;
import com.gh.gamecenter.feature.entity.SimulatorEntity;
import com.gh.gamecenter.feature.entity.TrialEntity;
import com.gh.gamecenter.feature.entity.UserEntity;
import com.gh.gamecenter.feature.entity.ViewsEntity;
import com.gh.gamecenter.feature.entity.WXSubscribeMsgConfig;
import com.gh.gamecenter.feature.entity.WechatPayEntity;
import com.gh.gamecenter.feature.entity.ZoneEntity;
import com.gh.gamecenter.gamedetail.entity.GameDetailSetting;
import com.gh.gamecenter.gamedetail.entity.GameDetailTabEntity;
import com.gh.gamecenter.home.custom.model.CustomPageData;
import com.gh.gamecenter.login.entity.UserInfoEntity;
import com.gh.gamecenter.personalhome.rating.MyRating;
import com.gh.gamecenter.qa.entity.AnswerDetailEntity;
import com.gh.gamecenter.qa.entity.ArticleDetailEntity;
import com.gh.gamecenter.qa.entity.AskSubjectEntity;
import com.gh.gamecenter.qa.entity.EditorInsertDefaultEntity;
import com.gh.gamecenter.qa.entity.InviteEntity;
import com.gh.gamecenter.qa.entity.QuestionsDetailEntity;
import com.gh.gamecenter.qa.entity.QuestionsIndexEntity;
import com.gh.gamecenter.qa.entity.TopCommunityCategory;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.protobuf.Any;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.Single;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Response;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Url;

/**
 * Created by khy on 2016/11/1.
 * api.ghzs666.com
 */
public interface ApiService {

    /**
     * 获取资讯-关注
     */
    @GET("users/{user_id}/follows/articles")
    Observable<List<ConcernEntity>> getZiXunConcern(@Path("user_id") String user_id, @Query("page") int page);


    /**
     * 获取文章列表
     *
     * @param filter :type_group(攻略/原创/资讯)
     */
    @GET("articles?view=digest")
    Observable<List<NewsEntity>> getArticleList(@Query("filter") String filter, @Query("page") int page);

    /**
     * 获取游戏摘要
     */
    @GET("games/{game_id}?view=digest")
    Observable<GameEntity> getGameDigest(@Path("game_id") String game_id);

    /**
     * 获取游戏新闻摘要
     */
    @GET("games/{game_id}?view=article")
    Observable<GameEntity> getGameNewsDigest(@Path("game_id") String game_id);

    /**
     * 获取服务器时间
     */
    @GET("time")
    Observable<TimeEntity> getTime();

    /**
     * 获取地区配置
     */
    @GET("region_setting")
    Single<RegionSetting> getRegionSetting(@Query("channel") String channel, @Query("ip") String ip);

    /**
     * 根据包名获取游戏摘要
     */
    @GET("games?view=digest")
    Observable<List<GameDigestEntity>> getGameDigestByPackageName(@Query("filter") String filter);


    /**
     * 根据包名获取游戏摘要
     */
    @GET("games?view=digest")
    Observable<List<GameEntity>> loadGameDataByPackageName(@Query("filter") String filter);

    /**
     * 获取游戏更新
     */
    @GET("games/{gh_id}?view=digest")
    Observable<GameEntity> getGameUpdateById(@Path("gh_id") String gh_id); // gh_id就是game_id

//    /**
//     * 获取搜索关键字
//     */
//    @GET("settings")
//    Observable<ArrayList<String>> getSearchHints();

    /**
     * 获取助手更新
     */
    @GET("upgrade")
    Observable<AppEntity> getUpdate(@Query("version") String version,
                                    @Query("version_code") int code,
                                    @Query("channel") String channel,
                                    @Query("android_sdk_version") int androidSdkVersion);

    /**
     * 获取实名认证
     */
    @GET("certification")
    Single<UserInfoEntity> getCertification();

    /**
     * 检查实名认证接口
     */
    @POST("./certification:check")
    Single<ResponseBody> postCertificationCheck(@Body RequestBody body);

    /**
     * 实名认证人工审核
     */
    @POST("./certification:review")
    Single<ResponseBody> postCertificationReview(@Body RequestBody body);

    /**
     * 获取是否人工审核中
     */
    @GET("certification/review")
    Single<ResponseBody> getCertificationReview();

    /**
     * 获取新闻详情
     */
    @GET("articles/{article_id}?view=detail")
    Observable<NewsDetailEntity> getNewsDetail(@Path("article_id") String article_id);

    /**
     * 获取新闻摘要
     */
    @GET("articles/{article_id}?view=digest")
    Observable<NewsEntity> getNewsDigest(@Path("article_id") String article_id); // 获取新闻摘要

    /**
     * 获取新闻相关推荐
     */
    @GET("articles/{article_id}/suggestions")
    Observable<List<NewsEntity>> getNewsSuggestion(@Path("article_id") String article_id);

    /**
     * 获取游戏新闻
     */
    @GET("articles")
    Observable<List<NewsEntity>> getGameNews(@Query("filter") String filter, @Query("page_size") int pageSize,
                                             @Query("page") int page);

    /**
     * 获取新闻rich摘要
     */
    @GET("articles/{article_id}?view=rich")
    Observable<ConcernEntity> getNewsRichDigest(@Path("article_id") String article_id);

    /**
     * 搜索新闻
     */
    @GET()
    Observable<List<NewsEntity>> getSearchNews(@Url String url);

    /**
     * 搜索游戏
     */
    @GET
    Observable<List<GameEntity>> getSearchGame(@Url String url);

    /**
     * 搜索CPM微信小游戏
     */
    @GET("mini_game/search/configs")
    Observable<List<GameEntity>> getSearchWechatMiniCPMGame(@Query("keyword") String key);

    /**
     * 游戏搜索的专题数据
     */
    @GET("./columns:search")
    Observable<List<SearchSubjectEntity>> getSearchSubject(@Query("keyword") String key, @Query("page") int page);

    /**
     * 获取首页滚动图
     */
    @GET("index/slides")
    Observable<List<LinkEntity>> getSlide();

    /**
     * 获取专题数据
     */
    @GET("columns/{column_id}/games")
    Single<List<GameEntity>> getColumn(
            @Path("column_id") String column_id,
            @Query("sort") String sort,
            @Query("filter") String order,
            @Query("AD") String ad,
            @Query("column_collection_id") String columnCollectionId,
            @Query("page") int page
    );

    /**
     * 获取专题数据标题
     */
    @GET("columns/{column_id}/setting")
    Observable<SubjectSettingEntity> getColumnSettings(@Path("column_id") String column_id);

    /**
     * 获取专题游戏 用于主页换一批
     */
    @GET("columns/{column_id}/games?page_size=30")
    Observable<List<GameEntity>> getSubjectGame(@Path("column_id") String column_id);

    /**
     * 上传意见反馈
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("suggestions")
    Observable<ResponseBody> postSuggestion(@Body RequestBody body);


    /**
     * 根据专题ID获取专题名称
     */
    @GET("columns/{column_id}?fields=name")
    Observable<ResponseBody> getSubjectName(@Path("column_id") String column_id);

    /**
     * 获取开服表数据
     */
    @GET("games/servers")
    Single<ServerPublishEntity> getGameServers(@Query("filter") String type);

    /**
     * 获取开测表信息
     */
    @GET("columns/tests/{id}")
    Single<ServerTestEntity> getGameTestServers(@Path("id") String testServerId, @Query("view") String view);

    /**
     * 获取游戏新闻类型
     */
    @GET("games/{game_id}/article_types")
    Observable<List<String>> getGameArticleType(@Path("game_id") String gameId);

    /**
     * 获取投票 游戏求版本列表
     */
    @GET("games/elasticsearch/{game_id}/platform_requests")
    Observable<List<VersionVoteEntity>> getVersionVote(@Path("game_id") String gameId, @Query("page") int page, @Query("keyword") String keyword);

    /**
     * 提交投票
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("games/{game_id}/platform_requests")
    Observable<ResponseBody> addVersionVote(@Body RequestBody body, @Path("game_id") String gameId);

    /**
     * 求版本投票
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("games/platform_requests/{platform_id}:vote")
    Observable<ResponseBody> postVersionVote(@Path("platform_id") String platformId);

    /**
     * 求版本取消投票
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("games/platform_requests/{platform_id}:vote-cancel")
    Observable<ResponseBody> postVersionCancelVote(@Path("platform_id") String platformId);

    /**
     * 获取工具箱分类数据
     */
    @GET("toolkit")
    Observable<List<ToolBoxBlockEntity>> getCategoryToolKits();

    /**
     * 根据关键字获取工具箱数据（新）
     */
    @GET("toolkit/search")
    Observable<List<ToolBoxEntity>> getToolKits(@Query("keyword") String keyword);

    /**
     * 根据game_id获取工具箱数据
     */
    @GET("toolkits?view=digest")
    Observable<List<ToolBoxEntity>> getGameToolBoxData(@Query("page") int page, @Query("filter") String filter);

    /**
     * 根据关键字获取工具箱信息(搜索)
     */
    @GET("toolkits")
    Observable<List<ToolBoxEntity>> getToolKitData(@Query("page") int page, @Query("filter") String filter);


    /**
     * 增加收藏的工具
     */
    @POST("users/{user_id}/favorites/toolkits/{toolkit_id}")
    Observable<ResponseBody> postCollectionTools(@Path("user_id") String user_id, @Path("toolkit_id") String toolkit_id);

    /**
     * 增加收藏的文章
     */
    @POST("users/{user_id}/favorites/articles/{article_id}")
    Observable<ResponseBody> postCollectionArticle(@Path("user_id") String user_id, @Path("article_id") String article_id);

    /**
     * 获取收藏的工具
     */
    @GET("users/{user_id}/favorites/toolkits")
    Observable<List<ToolBoxEntity>> getCollectionTools(@Path("user_id") String user_id, @Query("page") int page);

    /**
     * 获取收藏的文章
     */
    @GET("users/{user_id}/favorites/articles")
    Observable<List<NewsEntity>> getCollectionArticle(@Path("user_id") String user_id, @Query("page") int page);

    /**
     * 删除收藏的文章
     */
    @DELETE("users/{user_id}/favorites/toolkits/{toolkit_id}")
    Observable<ResponseBody> deleteCollectionTools(@Path("user_id") String user_id, @Path("toolkit_id") String toolkit_id);

    /**
     * 删除收藏的工具
     */
    @DELETE("users/{user_id}/favorites/articles/{article_id}")
    Observable<ResponseBody> deletaCollectionArticle(@Path("user_id") String user_id, @Path("article_id") String article_id);

    /**
     * 获取用户关注的游戏
     */
    @GET("users/{user_id}/follows/games")
    Observable<List<GameEntity>> getConcern(@Path("user_id") String user_id);


    /*********** CommentService ************/

    /**
     * 获取新闻评论数
     */
    @GET("articles/{article_id}/comments:count")
    Observable<List<CommentnumEntity>> getNewsCommentnum(@Path("article_id") String article_id, @Query("timestamp") long timestamp);

    /**
     * 提交投诉信息
     */
    @POST("articles/comments/{comment_id}:report")
    Observable<ResponseBody> postReportData(@Path("comment_id") String comment_id, @Body RequestBody reportData);

    /**
     * 发布评论
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("articles/{article_id}/comments")
    Observable<ResponseBody> postNewsComment(@Path("article_id") String article_id,
                                             @Body RequestBody body);

    /**
     * 评论点赞
     */
    @POST("articles/comments/{comment_id}:vote")
    Observable<ResponseBody> postCommentVote(@Path("comment_id") String comment_id);

    /**
     * 评论点赞
     */
    @POST("articles/comments/{comment_id}:hide")
    Observable<ResponseBody> deleteComment(@Path("comment_id") String comment_id);

    /**
     * 获取新闻评论
     */
    @GET("articles/{article_id}/comments?filter=order:hot")
    Observable<List<CommentEntity>> getHotComment(@Path("article_id") String articleId, @Query("page_size") int pageSize,
                                                  @Query("page") int page);

    /**
     * 获取新闻评论
     */
    @GET("articles/{article_id}/comments")
    Observable<List<CommentEntity>> getComment(@Path("article_id") String articleId, @Query("page_size") int pageSize,
                                               @Query("page") int page, @Query("timestamp") long timestamp);

    /**
     * 发布评论
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("articles/comments/{comment_id}:reply")
    Observable<ResponseBody> postReplyComment(@Path("comment_id") String comment_id,
                                              @Body RequestBody body);

    /**
     * 获取评论对话
     */
    @GET("articles/comments/{comment_id}/traces")
    Observable<List<CommentEntity>> getCommentTrace(@Path("comment_id") String news_id,
                                                    @Query("page") int page);

    /*********  LibaoService ********/

    /**
     * 获取礼包列表数据
     */
    @GET("libao")
    Observable<List<LibaoEntity>> getLibao(@Query("page") int page);

    /**
     * 搜索礼包列表数据
     */
    @GET("libao")
    Observable<List<LibaoEntity>> getLibaoBySearch(@Query("filter") String filter, @Query("page") int page);

    /**
     * 关注礼包列表数据
     */
    @GET("users/{user_id}/follows/libao")
    Observable<List<LibaoEntity>> getConcernLibao(@Path("user_id") String user_id, @Query("page") int page);

    /**
     * 获取礼包详情数据
     */
    @GET("libao/{libao_id}?view=detail")
    Observable<LibaoDetailEntity> getLibaoDetail(@Path("libao_id") String libao_id);

    /**
     * 获取礼包摘要数据
     */
    @GET("libao/{libao_id}?view=digest")
    Observable<LibaoEntity> getLibaoDigest(@Path("libao_id") String libao_id);

    /**
     * 获取礼包领取按钮状态
     */
    @GET("libao/status")
    Observable<List<LibaoStatusEntity>> getLibaoStatus(@Query("filter") String filter);

    /**
     * 获取礼包存号箱数据
     */
    @GET("users/{user_id}/libao/codes")
    Observable<List<LibaoEntity>> getCunHaoXiang(@Path("user_id") String user_id, @Query("page") int page, @Query("filter") String filter);

    /**
     * 领取礼包
     */
    @POST("libao/{libao_id}:ling")
    Observable<ResponseBody> postLibaoLing(@Path("libao_id") String libaoId);

    /**
     * 领取礼包 带验证数据
     */
    @POST("libao/{libao_id}:tao")
    Observable<ResponseBody> postLibaoLing(@Header("CODE") String captchaCode,
                                           @Path("libao_id") String libaoId);

    /**
     * 礼包 淘号
     */
    @POST("libao/{libao_id}:tao")
    Observable<ResponseBody> postLibaoTao(@Path("libao_id") String libaoId);

    /**
     * 删除存号箱的礼包
     */
    @DELETE("users/{user_id}/libao/codes/{code}")
    Observable<ResponseBody> deleteLibaoCode(@Path("user_id") String user_id, @Path("code") String code);

    /**
     * 获取验证码数据
     */
    @POST("libao/captcha")
    Observable<ResponseBody> getCaptchaData();

    /**
     * 获取历史礼包数据
     */
    @GET("libao")
    Observable<List<LibaoEntity>> getHistoryLibao(@Query("filter") String filter, @Query("page") int page);


    /***************8 MessageService *******/

    /**
     * 获取消息未读数据
     */
    @GET("users/{user_id}/messages:unread_count")
    Observable<MessageUnreadEntity> getMessageUnread(@Path("user_id") String user_id);


    /****** 问答（社区相关） *******/


    /**
     * 社区问题详情
     */
    @GET("bbses/questions/{question_id}?view=detail")
    Observable<QuestionsDetailEntity> getQuestionsById(@Path("question_id") String questionsId);

    /**
     * 社区问题的回答列表
     */
    @GET("questions/{questions_id}/answers?view=digest")
    Observable<List<AnswerEntity>> getQuestionsAnswer(@Path("questions_id") String questionsId, @Query("filter") String filter, @Query("page") int page);

    /**
     * 获取社区达人列表，(3.5 后，加上了我的关注的用户)
     */
    @GET("questions/{question_id}/experts")
    Observable<List<InviteEntity>> getInviteExperts(@Path("question_id") String questionsId, @Query("channel") String channel, @Query("page") int page);

    /**
     * 搜索社区达人列表
     */
    @GET("questions/{question_id}/experts:search")
    Observable<List<InviteEntity>> getSearchInviteExperts(@Path("question_id") String questionId,
                                                          @Query("keyword") String keyword, @Query("channel") String channel, @Query("page") int page);

    /**
     * 邀请达人回答社区问题
     */
    @POST("bbses/questions/{question_id}:invite")
    Observable<ResponseBody> postInvite(@Body RequestBody body, @Path("question_id") String questionId);

    /**
     * 搜索社区问题(编辑问题索引)
     */
    @GET("communities/{community_id}/questions:search?view=digest")
    Observable<List<QuestionsIndexEntity>> getAskSearchByTitle(@Path("community_id") String communityId, @Query("keyword") String keyword, @Query("page") int page);


    /**
     * 对社区问题进行回答
     */
    @POST("questions/{question_id}/answers")
    Observable<ResponseBody> postQuestionAnswer(@Body RequestBody body, @Path("question_id") String questionsId);

    /**
     * 对社区问题进行回答:修改
     */
    @POST("answers/{answer_id}")
    Observable<ResponseBody> patchQuestionAnswer(@Body RequestBody body, @Path("answer_id") String answerId);

    /**
     * 回答详情
     */
    @GET("answers/{answer_id}?view=detail")
    Observable<AnswerDetailEntity> getAnswerDetail(@Path("answer_id") String answerId, @Query("timestamp") long timestamp);

    /**
     * 获取社区问题标签
     */
    @GET("communities/{community_id}/tags")
    Observable<List<String>> getCommunitiesTags(@Path("community_id") String communityId);

    /**
     * 添加社区问题
     */
    @POST("bbses/questions")
    Observable<ResponseBody> postQuestions(@Body RequestBody body);

    /**
     * 编辑社区问题
     */
    @PUT("bbses/questions/{question_id}")
    Observable<ResponseBody> patchQuestions(@Body RequestBody body, @Path("question_id") String questionId);

    /**
     * 点赞答案
     */
    @POST("answers/{answer_id}:vote")
    Observable<VoteEntity> postAnswerVote(@Path("answer_id") String answerId);

    /**
     * 取消点赞答案
     */
    @POST("answers/{answer_id}:unvote")
    Observable<VoteEntity> postAnswerUnvote(@Path("answer_id") String answerId);

    /**
     * 点踩答案
     */
    @POST("answers/{answer_id}:oppose")
    Observable<ResponseBody> postAnswerOppose(@Path("answer_id") String answerId);

    /**
     * 对答案取消点踩
     */
    @POST("answers/{answer_id}:unoppose")
    Observable<ResponseBody> postAnswerUnoppose(@Path("answer_id") String answerId);

    /**
     * 获取用户的回答列表
     */
    @GET("users/{user_id}/answers")
    Observable<List<AnswerEntity>> getMyAnswers(@Path("user_id") String userId, @Query("page") int page,
                                                @Query("channel") String channel, @Query("timestamp") long timestamp);

    /**
     * 收藏回答
     */
    @POST("users/{user_id}/favorites/answers/{answer_id}")
    Observable<ResponseBody> postCollectionAnswer(@Path("user_id") String user_id, @Path("answer_id") String answerId);

    /**
     * 取消收藏回答
     */
    @DELETE("users/{user_id}/favorites/answers/{answer_id}")
    Observable<ResponseBody> deleteCollectionAnswer(@Path("user_id") String user_id, @Path("answer_id") String answerId);

    /**
     * 获取用户收藏的回答列表
     */
    @GET("users/{user_id}/favorites/answers")
    Observable<List<AnswerEntity>> getCollectionAnswer(@Path("user_id") String user_id, @Query("page") int page);

    /**
     * 专题数据
     */
    @GET("communities/{community_id}/columns/{column_id}")
    Observable<AskSubjectEntity> getAskSubjectData(@Path("community_id") String communityId, @Path("column_id") String columnId);

    /**
     * 社区专题的答案
     */
    @GET("communities/{community_id}/columns/{column_id}/contents")
    Observable<List<AnswerEntity>> getAskSubjectColumnAnswers(@Path("community_id") String communityId,
                                                              @Path("column_id") String columnId,
                                                              @Query("page") int page,
                                                              @Query("view") String view,
                                                              @Query("page_size") int pageSize);

    @GET("community/user/{user_id}/my_follow")
    Single<List<FollowUserEntity>> getMyFollowedUsers(@Path("user_id") String userId,
                                                      @Query("version") String version,
                                                      @Query("channel") String channel,
                                                      @Query("page") int page,
                                                      @Query("refresh") boolean refresh,
                                                      @QueryMap Map<String, Object> params);

    @GET("community/user/{user_id}/follow_data")
    Single<List<FollowDynamicEntity>> getFollowUpdates(@Path("user_id") String userId,
                                                       @Query("type") String type,
                                                       @Query("page") int page,
                                                       @Query("version") String version,
                                                       @Query("channel") String channel);

    @POST("community/user/{user_id}/my_follow/operate_top")
    Single<ResponseBody> operateTop(
            @Path("user_id") String userId,
            @Query("version") String version,
            @Query("channel") String channel,
            @Body RequestBody body);

    @POST("community/user/{user_id}/cancel_tip/{type}/{type_id}")
    Single<ResponseBody> postRead(@Path("user_id") String userId,
                                  @Path("type") String type,
                                  @Path("type_id") String typeId);

    @GET("community/follow_tab/recommend_user")
    Single<List<UserEntity>> getRecommendUser(
            @Query("version") String version,
            @Query("channel") String channel
    );

    /**
     * 关注-通用内容合集配置
     */

    @GET("community/follow_tab/common_collection")
    Single<List<FollowCommonContentCollection>> getFollowCommonCollection(
            @Query("version") String version,
            @Query("channel") String channel,
            @Query("page") int page);

    @GET("settings")
    Observable<SettingsEntity> getSettings(@Query("version") String version, @Query("channel") String channel);

    /**
     * 新的设置接口
     */
    @GET("settings")
    Single<NewApiSettingsEntity> getNewSettings(
            @Query("version") String version,
            @Query("channel") String channel,
            @Query("device") String device);

    /**
     * 获取新的配置信息，因为旧的已经太大了避免冲突
     */
    @GET("new_settings")
    Single<NewSettingsEntity> getNewSettings(
            @Query("manufacture") String manufacture,
            @Query("model") String model,
            @Query("channel") String channel,
            @Query("systemVersion") int systemVersion,
            @Query("ghVersion") String ghVersion);

    @GET("float_window_game/settings")
    Single<FloatWindowSettingEntity> getFloatWindowSettings();

    @GET("/settings/game_installed/whitelist")
    Single<WhitePackageListEntity> getInstallWhitelist();

    /**
     * 给一个回答新增评论
     */
    @POST("answers/{answer_id}/comments")
    Observable<ResponseBody> postNewCommentToAnswer(@Path("answer_id") String answerId, @Body RequestBody body);

    /**
     * 在评论列表回复某一条评论
     */
    @POST("answers/{answer_id}/comments/{comment_id}:reply")
    Observable<ResponseBody> postReplyToAnswerComment(@Path("answer_id") String answerId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 对评论的点赞
     */
    @POST("answers/{answer_id}/comments/{comment_id}:vote")
    Observable<ResponseBody> postVoteAnswerComment(@Path("answer_id") String answerId, @Path("comment_id") String commentId);

    /**
     * 投诉回答的评论
     */
    @POST("answers/{answer_id}/comments/{comment_id}:report")
    Observable<ResponseBody> postReportOfAnswerComment(@Path("answer_id") String answerId, @Path("comment_id") String commentId, @Body RequestBody reportData);

    /**
     * 获取评论列表．可以分页
     */
    @GET("answers/{answer_id}/comments")
    Observable<List<CommentEntity>> getAnswerCommentList(@Path("answer_id") String answerId, @Query("page") int page);

    /**
     * 获取评论的对话列表．
     */
    @GET("answers/{answer_id}/comments/{comment_id}/trace")
    Observable<List<CommentEntity>> getAnswerCommentConversationList(@Path("answer_id") String answerId, @Path("comment_id") String commentId, @Query("page") int page);

    /**
     * 签到
     */
    @GET("users/{user_id}:sign-in")
    Observable<SignEntity> postSign(@Path("user_id") String userId);

    /**
     * 修改开服信息
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("games/{game_id}/servers/{server_id}")
    Observable<ResponseBody> patchKaifu(@Body RequestBody body, @Path("game_id") String gameId, @Path("server_id") String serverId);

    /**
     * 删除开服信息
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @DELETE("games/{game_id}/servers/{server_id}")
    Observable<ResponseBody> deleteKaifu(@Path("game_id") String gameId, @Path("server_id") String serverId);


    /**
     * 创建开服信息
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("games/{game_id}/servers")
    Observable<List<String>> addKaifu(@Body RequestBody body, @Path("game_id") String gameId);

    /**
     * 获取版块首页数据
     */
    @GET("blocks/{block_id}/union")
    Single<BlockEntity> getBlockUnion(@Path("block_id") String blockId);


    /**
     * 版块的专题列表
     */
    @GET("blocks/{block_id}/columns")
    Observable<List<SubjectEntity>> getBlockColumns(@Path("block_id") String blockId, @Query("page") int page);

    /**
     * 获取关注的用户列表
     */
    @GET("users/{user_id}/followers")
    Observable<List<FollowersOrFansEntity>> getPersonalFollowers(@Path("user_id") String userId, @Query("channel") String channel, @Query("page") int page);


    /**
     * 获取用户的粉丝列表
     */
    @GET("users/{user_id}/fans")
    Observable<List<FollowersOrFansEntity>> getPersonalFans(@Path("user_id") String userId, @Query("channel") String channel, @Query("page") int page);


    /**
     * 关注
     */
    @POST("users/{user_id}/following")
    Observable<ResponseBody> postFollowing(@Path("user_id") String userId);

    /**
     * 取消关注
     */
    @DELETE("users/{user_id}/following")
    Observable<ResponseBody> deleteFollowing(@Path("user_id") String userId);

    /**
     * 获取用户的个人信息
     */
    @GET("users/{user_id}")
    Observable<PersonalEntity> getPersonalData(@Path("user_id") String userId, @Query("channel") String channel, @Query("timestamp") long timestamp);

    /**
     * 用户徽章列表
     */
    @GET("users/{user_id}/badges?page=1&page_size=20")
    Observable<List<BadgeEntity>> getBadges(@Path("user_id") String userId);

    /**
     * 用户可领取徽章列表（全部数据）
     */
    @GET("users/{user_id}/available_badges")
    Observable<List<BadgeEntity>> availableBadges(@Path("user_id") String userId);

    /**
     * 申请/领取徽章
     */
    @POST("badges/{badge_id}:receive")
    Single<ResponseBody> applyOrReceiveBadge(@Path("badge_id") String badgeId);

    /**
     * 用户主页显示的提问过的问题，回答的答案，点赞过的答案和关注过的问题
     */
    @GET("users/{user_id}/histories")
    Observable<List<PersonalHistoryEntity>> getPersonalHistory(@Path("user_id") String userId,
                                                               @Query("page") int page,
                                                               @Query("channel") String channel,
                                                               @Query("filter") String filter);

    /**
     * 用户主页对应的帖子、视频、提问、回答数量
     */
    @GET("users/{user_id}/histories")
    Single<retrofit2.Response<ResponseBody>> getPersonalHistoryCount(@Path("user_id") String userId,
                                                                     @Query("channel") String channel,
                                                                     @Query("filter") String filter);

    @GET()
    Observable<ImageInfoEntity> getImageInfo(@Url String url);

    /**
     * 获取启动弹窗
     *
     * @param channel      渠道
     * @param previousId   上一次获取到的弹窗 ID
     * @param previousTime 上一次获取到的弹窗时间
     */
    @GET("dialog")
    Single<DialogEntity> getOpeningDialog(@Query("channel") String channel, @Query("prev_id") String previousId, @Query("prev_time") Long previousTime, @Query("open_type") String openType);

    /**
     * 将消息标记为已读
     */
    @POST("users/{user_id}/messages/{message_id}:read")
    Observable<ResponseBody> postMessageRead(@Path("user_id") String userId, @Path("message_id") String messageId, @Body RequestBody body);

    /**
     * 在社区发布文章
     */
    @POST("communities/{community_id}/articles")
    Observable<ResponseBody> postCommunityArticle(@Path("community_id") String communityId, @Body RequestBody body);

    /**
     * 修改社区文章
     */
    @PUT("communities/{community_id}/articles/{article_id}")
    Observable<ResponseBody> patchCommunityArticle(@Path("community_id") String communityId,
                                                   @Path("article_id") String articleId,
                                                   @Body RequestBody body);

    /**
     * 保存社区文章的草稿
     */
    @POST("users/{user_id}/communities/article_drafts")
    Observable<ResponseBody> postCommunityArticleDrafts(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 修改社区文章的草稿
     */
    @PUT("users/{user_id}/communities/article_drafts/{draft_id}")
    Observable<ResponseBody> patchCommunityArticleDrafts(@Path("user_id") String userId,
                                                         @Path("draft_id") String draftId,
                                                         @Body RequestBody body);

    /**
     * 获取社区文章列表
     */
    @GET("users/{user_id}/communities/articles?view=home_page")
    Observable<List<ArticleEntity>> getMyArticle(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 获取用户的文章草稿列表
     */
    @GET("users/{user_id}/communities/article_drafts")
    Observable<List<ArticleDraftEntity>> getArticleDrafts(@Path("user_id") String userId, @Query("filter") String filter, @Query("page") int page);

    /**
     * 获取用户的文章草稿列表(只获取撰写草稿)
     */
    @GET("users/{user_id}/communities/article_drafts?view=create")
    Observable<List<ArticleDraftEntity>> getArticleDrafts(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 删除社区文章的草稿(撰写/编辑)
     */
    @DELETE("users/{user_id}/communities/article_drafts/{draft_id}")
    Observable<ResponseBody> deleteArticleDrafts(@Path("user_id") String userId, @Path("draft_id") String draftId);

    /**
     * 获取社区文章详情
     */
    @GET("communities/articles/{article_id}?view=detail")
    Observable<ArticleDetailEntity> getCommunityArticleDetail(@Path("article_id") String articleId);

    /**
     * 点赞社区文章
     */
    @POST("communities/articles/{article_id}:vote")
    Observable<VoteEntity> postCommunityArticleVote(@Path("article_id") String articleId);

    /**
     * 取消点赞社区文章
     */
    @POST("communities/articles/{article_id}:unvote")
    Observable<VoteEntity> postCommunityArticleUnVote(@Path("article_id") String articleId);

    /**
     * 踩社区文章
     */
    @POST("communities/{community_id}/articles/{article_id}:oppose")
    Observable<ResponseBody> postCommunityArticleOppose(@Path("community_id") String communityId, @Path("article_id") String articleId);

    /**
     * 取消踩社区文章
     */
    @POST("communities/{community_id}/articles/{article_id}:unoppose")
    Observable<ResponseBody> postCommunityArticleUnoppose(@Path("community_id") String communityId, @Path("article_id") String articleId);

    /**
     * 获取社区文章草稿内容(撰写/编辑)
     */
    @GET("users/{user_id}/communities/article_drafts/{draft_id}")
    Observable<ResponseBody> getArticleDraftsContent(@Path("user_id") String userId, @Path("draft_id") String draftId);

    /**
     * 获取收藏的社区文章列表
     */
    @GET("users/{user_id}/favorites/communities/articles")
    Observable<List<ArticleEntity>> getCollectionCommunityArticle(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 获取收藏的社区文章/问题列表
     */
    @GET("users/{user_id}/favorites/communities/articles?type=article-question")
    Observable<List<AnswerEntity>> getCollectionArticleAndQuestion(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 收藏社区文章
     */
    @POST("users/favorites/communities/articles/{article_id}")
    Observable<ResponseBody> postCommunityArticleFavorites(@Path("article_id") String articleId);

    /**
     * 取消收藏社区文章
     */
    @DELETE("users/favorites/communities/articles/{article_id}")
    Observable<ResponseBody> deleteCommunityArticleFavorites(@Path("article_id") String articleId);

    /**
     * 获取社区文章评论列表．可以分页
     */
    @GET("communities/articles/{article_id}/comments")
    Observable<retrofit2.Response<JsonArray>> getCommunityArticleCommentList(@Path("article_id") String articleId,
                                                                             @Query("sort") String type,
                                                                             @Query("page") int page,
                                                                             @QueryMap Map<String, Object> params);

    /**
     * 内容详情-相关内容列表
     *
     * @param contentId 内容ID
     */
    @GET("bbses/contents/{content_id}/related_contents")
    Observable<List<ArticleEntity>> getCommunityRelatedContentList(@Path("content_id") String contentId);

    /**
     * 获取社区文章评论的对话列表．
     */
    @GET("communities/articles/comments/{comment_id}/trace")
    Observable<List<CommentEntity>> getCommunityArticleCommentConversation(@Path("comment_id") String commentId,
                                                                           @Query("page") int page);

    /**
     * 获取单条社区文章评论
     */
    @GET("communities/articles/comments/{comment_id}")
    Single<CommentEntity> getCommunityArticleComment(@Path("comment_id") String commentId);

    /**
     * 获取社区文章评论回复
     */
    @GET("communities/articles/comments/{comment_id}/replies")
    Single<List<CommentEntity>> getCommunityArticleCommentReply(@Path("comment_id") String commentId,
                                                                @Query("sort") String sort,
                                                                @Query("page") int page,
                                                                @QueryMap Map<String, Object> params);

    /**
     * 评论社区文章评论
     */
    @POST("communities/articles/{article_id}/comments")
    Observable<ResponseBody> postCommentToCommunityArticle(@Path("article_id") String articleId,
                                                           @Body RequestBody body);

    /**
     * 在评论列表回复某一条评论
     */
    @POST("communities/articles/comments/{comment_id}:reply")
    Observable<ResponseBody> postReplyToCommunityArticleComment(@Path("comment_id") String commentId,
                                                                @Body RequestBody body);

    /**
     * 对社区文章评论的点赞
     */
    @POST("communities/articles/comments/{comment_id}:vote")
    Observable<ResponseBody> postVoteCommunityArticleComment(@Path("comment_id") String commentId);

    /**
     * 投诉社区文章评论
     */
    @POST("communities/articles/comments/{comment_id}:report")
    Observable<ResponseBody> postCommunityArticleCommentReport(@Path("comment_id") String commentId,
                                                               @Body RequestBody reportData);

    /**
     * 游戏评分页面
     */
    @GET("games/{game_id}/rating")
    Observable<Rating> getGameRating(@Path("game_id") String gameId, @Query("model") String model);

    /**
     * 游戏评论列表
     */
    @GET("games/{game_id}/comments")
    Observable<List<RatingComment>> getGameComments(@Path("game_id") String gameId,
                                                    @Query("page") int page,
                                                    @Query("filter") String filter,
                                                    @Query("sort") String sort);

    /**
     * 添加游戏评论
     */
    @POST("games/{game_id}/comments")
    Single<ResponseBody> postGameComment(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 赞同游戏评论
     */
    @POST("games/{game_id}/comments/{comment_id}:vote")
    Observable<ResponseBody> voteGameComment(@Path("game_id") String gameId, @Path("comment_id") String commentId);

    /**
     * 取消游戏评分点赞
     */
    @POST("games/{game_id}/comments/{comment_id}:unvote")
    Observable<ResponseBody> unvoteGameComment(@Path("game_id") String gameId, @Path("comment_id") String commentId);

    /**
     * 投诉评论
     */
    @POST("games/{game_id}/comments/{comment_id}:report")
    Observable<ResponseBody> reportGameComment(@Path("game_id") String gameId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 投诉评论回复
     */
    @POST("games/{game_id}/comments/{comment_id}/replies/{reply_id}:report")
    Observable<ResponseBody> reportGameCommentReply(@Path("game_id") String gameId,
                                                    @Path("comment_id") String commentId,
                                                    @Path("reply_id") String replyId,
                                                    @Body RequestBody body);

    /**
     * 删除游戏评论
     */
    @DELETE("games/{game_id}/comments/{comment_id}")
    Observable<ResponseBody> deleteGameComment(@Path("game_id") String gameId, @Path("comment_id") String commentId);

    /**
     * 删除游戏评回复
     */
    @DELETE("games/{game_id}/comments/{comment_id}/replies/{reply_id}")
    Observable<ResponseBody> deleteGameCommentReply(@Path("game_id") String gameId, @Path("comment_id") String commentId, @Path("reply_id") String replyId);

    /**
     * 获取游戏库“猜你喜欢”专题
     */
    @GET("blocks/smart_column")
    Observable<SubjectEntity> getBlockSmartColumn();

    /**
     * 版主修改问题
     */
    @POST("moderators/{moderator_id}/questions/{question_id}")
    Observable<ResponseBody> moderatorsPatchQuestion(@Body RequestBody body,
                                                     @Path("moderator_id") String moderatorId,
                                                     @Path("question_id") String questionId);

    /**
     * 版主隐藏问题
     */
    @POST("moderators/{moderator_id}/questions/{question_id}:hide")
    Observable<ResponseBody> moderatorsHideQuestion(@Path("moderator_id") String moderatorId,
                                                    @Path("question_id") String questionId);

    /**
     * 版主隐藏回答
     */
    @POST("answers/{answer_id}:hide")
    Observable<ResponseBody> hideAnswer(@Path("answer_id") String answerId);

    /**
     * 版主折叠回答
     */
    @POST("answers/{answer_id}:fold")
    Observable<ResponseBody> foldAnswer(@Path("answer_id") String answerId);

    /**
     * 版主回答加精
     */
    @POST("answers/{answer_id}:choiceness")
    Observable<ResponseBody> highlightAnswer(@Path("answer_id") String answerId);

    /**
     * 版主取消回答加精
     */
    @POST("answers/{answer_id}:cancel_choiceness")
    Observable<ResponseBody> cancelHighlightAnswer(@Path("answer_id") String answerId);

    /**
     * 百度ocpc激活
     */
    @POST("./app:activate")
    Observable<ResponseBody> postActivationInfo();

    /**
     * 次日留存
     */
    @POST("./app:retention")
    Observable<ResponseBody> postRetentionInfo();

    /**
     * 获取首页游戏补充库
     */
    @GET("reserve_columns")
    Observable<ResponseBody> getReserveColumns();

    /**
     * 设置回答详情的的评论区域是否开启
     */
    @POST("answers/{answer_id}:commentable")
    Observable<ResponseBody> postAnswerCommentable(@Path("answer_id") String answerId, @Body RequestBody body);

    /**
     * 加精社区文章
     */
    @POST("communities/articles/{article_id}:moderator_choiceness")
    Observable<ResponseBody> highlightCommunityArticle(@Path("article_id") String articleId);

    /**
     * 取消加精社区文章
     */
    @POST("communities/articles/{article_id}:cancel_choiceness")
    Observable<ResponseBody> cancelHighlightCommunityArticle(@Path("article_id") String articleId);

    /**
     * 隐藏社区文章
     */
    @POST("communities/articles/{article_id}:hide")
    Observable<ResponseBody> hideCommunityArticle(@Path("article_id") String articleId);

    /**
     * 获取置顶帖子类型
     */
    @GET("communities/top_category")
    Observable<List<TopCommunityCategory>> getTopCommunityCategory();

    /**
     * 普通帖-置顶
     */
    @POST("communities/{community_id}/articles/{article_id}:set-top")
    Observable<ResponseBody> topCommunityArticle(@Path("article_id") String articleId,
                                                 @Path("community_id") String communityId,
                                                 @Body RequestBody body);

    /**
     * 普通帖-取消置顶
     */
    @POST("communities/{community_id}/articles/{article_id}:cancel-top")
    Observable<ResponseBody> cancelTopCommunityArticle(@Path("article_id") String articleId,
                                                       @Path("community_id") String communityId,
                                                       @Body RequestBody body);

    /**
     * 提问帖-置顶
     */
    @POST("question/{question_id}:set-top")
    Observable<ResponseBody> topCommunityQuestion(@Path("question_id") String questionId,
                                                  @Body RequestBody body);

    /**
     * 提问帖-取消置顶
     */
    @POST("question/{question_id}:cancel-top")
    Observable<ResponseBody> cancelTopCommunityQuestion(@Path("question_id") String questionId,
                                                        @Body RequestBody body);

    /**
     * 视频帖-置顶
     */
    @POST("video/{video_id}:set-top")
    Observable<ResponseBody> topCommunityVideo(@Path("video_id") String videoId,
                                               @Body RequestBody body);

    /**
     * 视频帖-取消置顶
     */
    @POST("video/{video_id}:cancel-top")
    Observable<ResponseBody> cancelTopCommunityVideo(@Path("video_id") String videoId,
                                                     @Body RequestBody body);


    /**
     * 隐藏社区文章评论
     */
    @POST("communities/articles/comments/{comment_id}:hide")
    Observable<ResponseBody> hideCommunityArticleComment(@Path("comment_id") String commendId);

    /**
     * 获取游戏评分回复列表
     */
    @GET("games/{game_id}/comments/{comment_id}/replies")
    Observable<List<RatingReplyEntity>> getCommentReply(@Path("game_id") String gameId,
                                                        @Path("comment_id") String commitId,
                                                        @Query("sort") String sort,
                                                        @Query("page") int page,
                                                        @QueryMap Map<String, Object> params);

    /**
     * 回复评论
     */
    @POST("games/{game_id}/comments/{comment_id}/replies")
    Observable<ResponseBody> postCommentReply(@Path("game_id") String gameId,
                                              @Path("comment_id") String commitId,
                                              @Body RequestBody body);

    /**
     * 回复评论回复
     */
    @POST("games/{game_id}/comments/{comment_id}/replies/{reply_id}:reply")
    Observable<ResponseBody> postReplyToReply(@Path("game_id") String gameId,
                                              @Path("comment_id") String commitId,
                                              @Path("reply_id") String replyId,
                                              @Body RequestBody body);

    /**
     * 点赞回复信息
     */
    @POST("games/{game_id}/comments/{comment_id}/replies/{reply_id}:vote")
    Observable<ResponseBody> postReplyVote(@Path("game_id") String gameId,
                                           @Path("comment_id") String commitId,
                                           @Path("reply_id") String replyId);

    /**
     * 取消点赞回复信息
     */
    @POST("games/{game_id}/comments/{comment_id}/replies/{reply_id}:unvote")
    Observable<ResponseBody> postReplyUnvote(@Path("game_id") String gameId,
                                             @Path("comment_id") String commitId,
                                             @Path("reply_id") String replyId);

    /**
     * 获取单条游戏评论
     */
    @GET("games/{game_id}/comments/{comment_id}")
    Observable<RatingComment> getGameComment(@Path("game_id") String gameId,
                                             @Path("comment_id") String commitId);

    /**
     * 新建游戏预约
     */
    @POST("games/{game_id}/appointment")
    Single<ReserveReminderEntity> createNewGameReservation(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 取消游戏预约
     */
    @POST("games/{game_id}/appointment/cancel")
    Single<ResponseBody> cancelGameReservation(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 删除游戏预约
     */
    @DELETE("games/{game_id}/appointment")
    Single<ResponseBody> deleteGameReservation(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 获取用户游戏预约列表
     */
    @GET("users/appointments")
    Single<List<GameEntity>> getGameReservations(@Query("page") int page, @Query("timestamp") long timestamp);

    /**
     * 获取用户游戏预约列表
     */
    @GET("users/{user_id}/appointment?view=simple&page_size=500")
    Single<List<String>> getAllTheGameReservations(@Path("user_id") String userId, @Query("timestamp") long timestamp);

    /**
     * 获取某用户的游戏评分列表（userId为本人则为个人主页-我的评分）
     */
    @GET("users/{user_id}/games/comments")
    Single<List<MyRating>> getMyRating(@Path("user_id") String userId, @Query("page") int page, @Query("filter") String filter);

    /**
     * 游戏评分-修改
     */
    @PUT("games/{game_id}/comments/{comment_id}")
    Single<ResponseBody> patchGameRating(@Path("game_id") String gameId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 获取设备别名
     */
    @GET("devices/alias")
    Single<ResponseBody> getDeviceAlias(@Query("model") String model);

    /**
     * 获取评分修改记录
     */
    @GET("games/{game_id}/comments/{comment_id}/update_logs")
    Single<List<RatingComment>> getGameCommentLogs(@Path("game_id") String gameId, @Path("comment_id") String commentId, @Query("page") int page);

    /**
     * 获取具有相应标签的游戏列表
     */
    @GET("games?view=digest")
    Single<List<GameEntity>> getGamesWithSpecificTag(@Query("filter") String filter, @Query("sort") String sort, @Query("page") int page);

    /**
     * 获取相关游戏标签列表
     */
    @GET("games/tags")
    Single<ArrayList<TagEntity>> getRelatedTags(@Query("filter") String filter);

    /**
     * 获取视频详情列表
     */
    @GET("videos/{video_id}")
    Single<ArrayList<VideoEntity>> getVideoDetailList(@Path("video_id") String videoId, @Query("filter") String filter);

    /**
     * 获取专区视频流
     */
    @GET("videos/{video_id}")
    Single<ArrayList<VideoEntity>> getVideoDetailList(@Path("video_id") String videoId, @Query("filter") String filter, @Query("field_id") String fieldId, @Query("section_name") String sectionName);

    /**
     * 视频流播放算法
     */
    @POST("videos/stream?page_size=20")
    Single<ArrayList<VideoEntity>> getVideoStream(@Query("type") String type, @Body RequestBody cacheVideoIds, @Query("video_id") String videoId, @Query("cache_id") String cacheId, @Query("page") int page);

    /**
     * 游戏详情视频流播放算法
     */
    @POST("videos/stream?page_size=20")
    Single<ArrayList<VideoEntity>> getGameDetailVideoStream(@Query("type") String type, @Body RequestBody cacheVideoIds, @Query("video_id") String videoId, @Query("game_id") String gameId, @Query("page") int page);

    /**
     * @deprecated 4.8.0废弃
     * 获取最新排序的视频流（首页最新Tab）
     */
    @GET("videos/stream?page_size=20")
    Single<ArrayList<VideoEntity>> getVideoStream(@Query("page") int page);

    /**
     * 获取关注用户的视频流（首页关注Tab）
     */
    @POST("users/{user_id}/followers/videos?page_size=20")
    Single<retrofit2.Response<ArrayList<VideoEntity>>> getAttentionVideoStream(@Path("user_id") String userId, @Body RequestBody cacheVideoIds, @Query("page") int page);

    /**
     * 获取关注用户的视频流（首页关注Tab-刷新用）
     */
    @POST("users/{user_id}/followers/videos?page_size=20&view=refresh")
    Single<retrofit2.Response<ArrayList<VideoEntity>>> getAttentionVideoStreamRefresh(@Path("user_id") String userId, @Body RequestBody cacheVideoIds, @Query("page") int page);

    /**
     * 上传关注视频浏览记录
     */
    @POST("users/{user_id}/followers/videos?view=no_return")
    Single<ResponseBody> postAttentionVideoRecord(@Path("user_id") String userId, @Body RequestBody cacheVideoIds);

    /**
     * 获取活动的视频流
     *
     * @param type hot最热,new最新,award获奖（只返回获奖视频）
     * @param act  活动名称
     */
    @GET("activities/videos/{video_id}/stream?page_size=20")
    Single<ArrayList<VideoEntity>> getActivitiesVideoStream(@Path("video_id") String videoId, @Query("page") int page, @Query("type") String type, @Query("act") String act);

    /**
     * 获取活动的视频流（可滑动）
     *
     * @param type hot最热,new最新,award获奖（只返回获奖视频）
     */
    @GET("videos/{video_id}/scroll")
    Single<ArrayList<VideoEntity>> getActivitiesVideoStreamScroll(@Path("video_id") String videoId, @Query("type") String type, @Query("act_id") String actId, @Query("filter") String filter);

    /**
     * 点赞视频
     */
    @POST("videos/{video_id}:vote")
    Single<ResponseBody> voteVideo(@Path("video_id") String videoId);

    /**
     * 取消点赞视频
     */
    @POST("videos/{video_id}:unvote")
    Single<ResponseBody> undoVoteVideo(@Path("video_id") String videoId);

    /**
     * 收藏视频
     */
    @POST("users/{user_id}/favorites/videos/{video_id}")
    Single<ResponseBody> collectVideo(@Path("user_id") String userId, @Path("video_id") String videoId);

    /**
     * 取消收藏视频
     */
    @DELETE("users/{user_id}/favorites/videos/{video_id}")
    Single<ResponseBody> undoCollectVideo(@Path("user_id") String userId, @Path("video_id") String videoId);

    /**
     * 提交分享视频统计
     */
    @POST("videos/{video_id}:share")
    Single<JsonObject> shareVideoStatistics(@Path("video_id") String videoId);

    /**
     * 社区内容浏览记录
     */
    @POST("browses")
    Single<ResponseBody> postBrowses(@Body RequestBody body);

    /**
     * 给一个视频新增评论
     */
    @POST("videos/{video_id}/comments")
    Observable<ResponseBody> postNewCommentToVideo(@Path("video_id") String videoId, @Body RequestBody body);

    /**
     * 在评论列表回复某一条评论
     */
    @POST("videos/{video_id}/comments/{comment_id}:reply")
    Observable<ResponseBody> postReplyToVideoComment(@Path("video_id") String videoId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 对评论的点赞
     */
    @POST("videos/{video_id}/comments/{comment_id}:vote")
    Observable<ResponseBody> postVoteToVideo(@Path("video_id") String videoId, @Path("comment_id") String commentId);

    /**
     * 投诉回答的评论
     */
    @POST("videos/{video_id}/comments/{comment_id}:report")
    Observable<ResponseBody> postVideoCommentReport(@Path("video_id") String videoId, @Path("comment_id") String commentId, @Body RequestBody reportData);

    /**
     * 获取评论列表．可以分页
     */
    @GET("videos/{video_id}/comments")
    Observable<retrofit2.Response<JsonArray>> getVideoCommentList(@Path("video_id") String videoId, @Query("page") int page, @QueryMap Map<String, Object> params);

    /**
     * 获取评论的对话列表．
     */
    @GET("videos/{video_id}/comments/{comment_id}/trace")
    Observable<List<CommentEntity>> getVideoCommentConversationList(@Path("video_id") String videoId, @Path("comment_id") String commentId, @Query("page") int page);

    /**
     * 获取火山云上传配置
     */
    @GET("sts/tos?type=user")
    Single<OssEntity> getOssUpdateConfig();

    /**
     * 获取视频标签
     */
    @GET("videos/tags")
    Single<List<VideoTagEntity>> getVideoTags();

    /**
     * 获取视频分类
     */
    @GET("videos/categories")
    Single<List<VideoTagEntity>> getVideoCategories();

    /**
     * 提交视频
     */
    @POST("videos")
    Observable<ResponseBody> postVideo(@Body RequestBody body);

    /**
     * 修改视频
     */
    @POST("videos/{video_id}")
    Observable<ResponseBody> patchVideo(@Body RequestBody body, @Path("video_id") String videoId);

    /**
     * 提交视频草稿
     */
    @POST("users/{user_id}/video_drafts")
    Single<ResponseBody> postVideoDraft(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 修改视频草稿
     */
    @POST("users/{user_id}/video_drafts/{draft_id}")
    Single<ResponseBody> patchVideoDraft(@Path("user_id") String userId, @Body RequestBody body, @Path("draft_id") String draftId);

    /**
     * 获取用户的视频草稿列表
     */
    @GET("users/{user_id}/video_drafts")
    Observable<List<VideoDraftEntity>> getVideoDraft(@Path("user_id") String userId, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取用户的视频列表(审核)
     */
    @GET("users/{user_id}/videos?view=uploaded_page")
    Observable<List<VideoEntity>> getVideoVerify(@Path("user_id") String userId, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 删除视频草稿
     */
    @DELETE("users/{user_id}/video_drafts/{draft_id}")
    Observable<ResponseBody> deleteVideoDraft(@Path("user_id") String userId, @Path("draft_id") String draftId);


    /**
     * 获取用户的视频(个人主页)
     */
    @GET("users/{user_id}/videos")
    Observable<List<MyVideoEntity>> getUserVideo(@Path("user_id") String userId, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取用户的视频收藏列表
     */
    @GET("users/{user_id}/favorites/videos")
    Observable<List<MyVideoEntity>> getCollectionVideo(@Path("user_id") String userId, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取游戏视频合集
     */
    @GET("games/{game_id}/videos")
    Observable<List<MyVideoEntity>> getGameVideo(@Path("game_id") String gameId, @Query("sort") String sort, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取游戏视频相关信息
     */
    @GET("games/{game_id}/video_infos")
    Single<GameVideoInfo> getGameVideoInfo(@Path("game_id") String gameId);

    /**
     * 记录用户成功安装应用(用于玩过的游戏)
     */
    @POST("users/{user_id}/played_games")
    Single<ResponseBody> postPlayedGame(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 批量新增玩过的游戏
     */
    @POST("users/{user_id}/played_games:batch_create")
    Single<ResponseBody> postPlayedGames(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 清除用户成功安装应用记录(用于玩过的游戏)
     */
    @DELETE("users/{user_id}/played_games/{game_id}")
    Single<ResponseBody> deletePlayedGame(@Path("user_id") String userId, @Path("game_id") String gameId);

    /**
     * 获取玩过的游戏总数
     */
    @GET("users/{user_id}/played_games")
    Single<retrofit2.Response<ResponseBody>> getPlayedGamesCount(@Path("user_id") String userId, @Query("timestamp") long timestamp);

    /**
     * 获取用户成功安装应用记录(用于玩过的游戏)
     */
    @GET("users/{user_id}/played_games")
    Single<List<GameEntity>> getPlayedGames(@Path("user_id") String userId, @Query("page") int page, @Query("timestamp") long timestamp, @QueryMap Map<String, Object> params);

    /**
     * 获取开服过滤标签
     */
    @GET("games/servers/filter_tag")
    Single<List<ServersGameCategory>> getServerFilterTag();

    /**
     * 获取安利墙评论列表
     */
    @GET("anliwall/comments")
    Single<List<AmwayCommentEntity>> getAmwayCommentList(@Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取礼仪考试开关状态
     */
    @GET("exam/etiquette/switch_status")
    Single<ResponseBody> getRegulationTestStatus();

    /**
     * 获取安利墙列表
     */
    @GET("anliwall/columns")
    Single<List<SubjectEntity>> getAmwaySubjectList();

    /**
     * 绑定微信
     */
    @POST("users/wechat/bind")
    Single<ResponseBody> postBindWechat(@Body RequestBody body);

    /**
     * 获取公众号配置信息
     */
    @GET("users/wechat/config")
    Single<WechatConfigEntity> getWechatConfig();

    /**
     * 用户是否已对游戏评分
     */
    @GET("./users/{user_id}/games/{game_id}:has_comment")
    Single<ResponseBody> isUserCommentedOnThisGame(@Path("user_id") String userId, @Path("game_id") String gameId);

    /**
     * 获取单条安利墙评论详情
     */
    @GET("anliwall/comments/{comment_id}")
    Single<AmwayCommentEntity> getAmwayDetail(@Path("comment_id") String commentId);

    /**
     * 专题合集配置接口
     */
    @GET("columns/collections/{collection_id}")
    Observable<GameColumnCollection> getGameColumnCollection(@Path("collection_id") String gameId);

    /**
     * 专题合集列表
     */
    @GET("columns/collections/{collection_id}/contents")
    Observable<List<LinkEntity>> getGameColumnCollectionList(@Path("collection_id") String gameId, @Query("page") int page);

    /**
     * 游戏上传
     */
    @POST("users/{user_id}/upload_games")
    Observable<ResponseBody> uploadGames(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 获取游戏评论引导标签
     */
    @GET("games/comments/guide_tags")
    Observable<List<String>> guideTags();

    /**
     * 获取我的光环（新）数据
     */
    @GET("halo_addons/new")
    Single<ArrayList<HaloAddonEntity>> getNewHaloAddons();

    @GET("devices/{device_id}/played_update_time")
    Single<ResponseBody> getUsageStatusUpdateTime(@Path("device_id") String deviceId);

    /**
     * 批量新增游戏时长
     */
    @POST("users/{user_id}/played_times:batch_create")
    Single<ResponseBody> postUsageStatus(@Body RequestBody body, @Path("user_id") String userId);

    /**
     * 身份证输入框说明文案
     */
    @GET("users/auth_text")
    Observable<ResponseBody> getAuthText();

    /**
     * 删除视频
     */
    @DELETE("videos/{video_id}")
    Observable<ResponseBody> deleteVideo(@Path("video_id") String videoId);

    /**
     * 获取预约上线弹窗
     */
    @GET("users/appointment_popup")
    Single<ReserveOnlineEntity> getReserveDialog();

    /**
     * 预约游戏上线弹窗-游戏列表(开启wifi自动下载)
     */
    @GET("users/appointment_popup/games?filter=wifi_auto_download:true")
    Single<List<GameEntity>> loadGamesWithAutoDownload(
            @Query("page") int page,
            @Query("page_size") int page_size,
            @Query("filter") String filter);

    /**
     * 添加下载任务成功
     */
    @POST("users/appointments/games/log_download")
    Single<ResponseBody> logAutoDownload(@Body HashMap<String, Object> body);

    /**
     * 获取我的光环部分功能的未读数
     */
    @GET("halo_addons/unread_count")
    Single<AddonsUnreadEntity> getAddonsUnread();

    /**
     * 获取选择游戏-快速选择
     */
    @GET("users/{user_id}/choice_games")
    Observable<List<EditorInsertDefaultEntity>> getEditorInsertDefaultData(@Path("user_id") String userId);

    /**
     * 标记收藏回答已读
     */
    @POST("users/{user_id}/favorites/answers/{answer_id}:read")
    Single<ResponseBody> postCollectionAnswerRead(@Path("user_id") String userId, @Path("answer_id") String answerId);

    /**
     * 标记收藏文章已读
     */
    @POST("users/{user_id}/favorites/communities/{community_id}/articles/{article_id}:read")
    Single<ResponseBody> postCollectionArticleRead(@Path("user_id") String userId, @Path("community_id") String communityId, @Path("article_id") String articleId);

    /**
     * 获取专题刷新游戏列表
     */
    @GET("columns/refresh_games")
    Single<List<SubjectRefreshEntity>> getBlockSubjectRefresh(@Query("filter") String filter);

    /**
     * 标记我的光环部分功能已读
     */
    @POST("halo_addons/unread_count:refresh")
    Single<ResponseBody> refreshUnreadCount(@Body RequestBody body);

    /**
     * 获取用户数据 (暂用于游戏详情的动态页面)
     */
    @POST("users/{user_id}/me")
    Single<UnifiedUserTrendEntity> getUserRelatedInfoByPost(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 获取游戏历史包列表
     */
    @GET("games/{game_id}/history_apks")
    Single<List<ApkEntity>> getHistoryApks(@Path("game_id") String gameId, @Query("page") int page);

    /**
     * 获取游戏设备弹窗列表
     */
    @GET("games/device_dialogs")
    Single<List<DeviceDialogEntity>> deviceDialogs();

    /**
     * 获取游戏详情过滤标签数据
     */
    @GET("games/filter_detail_tags")
    Observable<ArrayList<String>> getFilterDetailTags();

    /**
     * 获取新闻阅读量
     */
    @GET("articles/visits")
    Observable<List<ViewsEntity>> getArticlesVisits(@Query("filter") String filter);

    /**
     * 统计新闻阅读量
     */
    @POST("articles/{article_id}:stat_visit")
    Observable<ResponseBody> postArticleVisit(@Path("article_id") String articleId);


    /**
     * 获取游戏大事件
     */
    @GET("games/{gameId}/events")
    Observable<List<BigEvent>> getBigEvent(@Path("gameId") String gameId);

    /**
     * 获取游戏开服详情数据（注：和游戏详情获取到的开服数据是有区别的）
     */
    @GET("games/{game_id}/server_calendar")
    Single<List<ServerCalendarEntity>> getGameServerCalendar(@Path("game_id") String gameId,
                                                             @Query("view") String view,
                                                             @Query("refresh") boolean refresh);

    /**
     * 获取游戏上传提示
     */
    @GET("users/upload_games/tip")
    Single<JsonObject> uploadGamesTips();

    /**
     * 视频日志记录
     */
    @POST("videos/logs")
    Single<ResponseBody> uploadVideoLog(@Body RequestBody body);

    /**
     * 删除视频评论
     */
    @POST("videos/comments/{comment_id}:inactivate")
    Single<ResponseBody> deleteVideoComment(@Path("comment_id") String commentId);

    /**
     * 版主删除视频评论
     */
    @POST("communities/{community_id}/videos/{video_id}/comments/{comment_id}:hide")
    Single<ResponseBody> moderatorsHideVideoComment(@Path("community_id") String communityId, @Path("video_id") String videoId, @Path("comment_id") String commentId);

    /**
     * 获取用户视频数据总览
     */
    @GET("users/{user_id}/video_data")
    Observable<VideoDataOverViewEntity> getVideoData(@Path("user_id") String userId);

    /**
     * 获取用户视频粉丝量
     */
    @GET("users/{user_id}/video_fan")
    Observable<LinkedHashMap<String, Integer>> getVideoFansData(@Path("user_id") String userId);


    /**
     * 获取用户视频播放数
     */
    @GET("users/{user_id}/video_play")
    Observable<LinkedHashMap<String, Integer>> getVideoPlayData(@Path("user_id") String userId);

    /**
     * 获取游戏视评论的回复列表
     */
    @GET("videos/{video_id}/comments/{comment_id}/replies?page_size=3")
    Observable<ArrayList<CommentEntity>> getVideoCommentReply(@Path("video_id") String videoId, @Path("comment_id") String commentId, @Query("page") int page);

    /**
     * 获取论坛首页轮播图
     */
    @GET("bbses/slides")
    Observable<List<LinkEntity>> getForumSlide();

    /**
     * 获取关注的论坛
     */
    @GET("users/{user_id}/follows/bbses")
    Observable<List<ForumEntity>> getFollowsForum(@Path("user_id") String userId);

    /**
     * 搜索论坛
     */
    @GET("./bbses:search_name")
    Observable<List<ForumEntity>> searchBbs(@Query("keyword") String keyword, @Query("page") int page);

    /**
     * 论坛顶部轮播图
     */
    @GET("bbses/slides")
    Single<List<ForumBannerEntity>> getForumBanners();

    /**
     * 热门论坛列表
     */
    @GET("./bbses:hot")
    Observable<List<ForumEntity>> getHotForum(@Query("page") int page);

    /**
     * 官方论坛列表
     */
    @GET("./bbses:official")
    Observable<List<ForumEntity>> getOfficialForum(@Query("page") int page);

    /**
     * 关注论坛
     */
    @POST("bbses/{bbs_id}:follow")
    Single<ResponseBody> followForum(@Path("bbs_id") String bbsId);

    /**
     * 取消关注论坛
     */
    @POST("bbses/{bbs_id}:unfollow")
    Single<ResponseBody> unFollowForum(@Path("bbs_id") String bbsId);

    /**
     * 获取论坛推荐Tab内容
     */
    @GET("bbses/recommends")
    Observable<List<ArticleEntity>> getForumRecommends(@Query("sort") String sort, @Query("page") int page);

    /**
     * 获取论坛详情
     */
    @GET("bbses/{bbs_id}")
    Observable<ForumDetailEntity> getForumDetail(@Path("bbs_id") String bbsId, @Query("refresh") boolean refresh);

    /**
     * 获取论坛板块列表
     */
    @GET("bbses/{bbs_id}/sections")
    Observable<List<ForumDetailEntity.Section>> getForumSections(@Path("bbs_id") String bbsId);

    /**
     * 获取论坛全部Tab内容（社区文章+问题）
     */
    @GET("bbses/{bbs_id}/contents")
    Observable<List<AnswerEntity>> getAllForumList(
            @Path("bbs_id") String bbsId,
            @Query("top_id") String fixedTopId,
            @Query("sort") String sort,
            @Query("page") int page,
            @QueryMap Map<String, Object> params);

    /**
     * 获取论坛全部Tab内容（社区文章+问题） (同上)
     */
    @GET("bbses/{bbs_id}/contents")
    Observable<List<AnswerEntity>> getAllForumList(
            @Path("bbs_id") String bbsId,
            @Query("sort") String sort,
            @Query("page") int page,
            @QueryMap Map<String, Object> params);

    /**
     * 获取论坛精华Tab内容（社区文章）
     */
    @GET("bbses/{bbs_id}/jinghua")
    Observable<List<AnswerEntity>> getEssenceForumList(@Path("bbs_id") String bbsId, @Query("page") int page);

    /**
     * 获取论坛问答Tab内容（问题）
     */
    @GET("bbses/{bbs_id}/questions?view=digest")
    Observable<List<AnswerEntity>> getAskForumList(@Path("bbs_id") String bbsId, @Query("sort") String sort, @Query("page") int page);

    /**
     * 获取论坛问答Tab内容（视频）
     */
    @GET("bbses/{bbs_id}/videos")
    Observable<List<AnswerEntity>> getVideoForumList(@Path("bbs_id") String bbsId, @Query("sort") String sort, @Query("page") int page);

    /**
     * 判断是否版主与获取版主交流qq群
     */
    @GET("api_go/bbses/{bbs_id}/moderators_info")
    Single<JsonObject> getModeratorsInfo(@Path("bbs_id") String bbsId);

    /**
     * 获取论坛版主
     */
    @GET("api_go/bbses/{bbs_id}/moderators")
    Observable<ArrayList<PersonalEntity>> getModerators(@Path("bbs_id") String bbsId);

    /**
     * 获取申请版主状态
     */
    @GET("api_go/bbses/{bbs_id}/moderators_apply_status")
    Observable<ApplyModeratorStatusEntity> getApplyModeratorStatus(@Path("bbs_id") String bbsId);

    /**
     * 申请版主
     */
    @POST("api_go/bbses/{bbs_id}/moderators_apply")
    Observable<ResponseBody> postApplyModerator(@Path("bbs_id") String bbsId);

    /**
     * 获取视频活动标签开关状态
     */
    @GET("videos/activity_tags/switch_status")
    Single<JsonObject> getActivityTagStatus();

    /**
     * 视频活动标签列表
     */
    @GET("videos/activity_tags")
    Observable<ArrayList<ActivityLabelEntity>> getActivityTags(@Query("location") String location, @Query("bbs_id") String bbsId);

    /**
     * 取消点赞游戏视频的评论
     */
    @POST("videos/{video_id}/comments/{comment_id}:unvote")
    Observable<ResponseBody> unVoteVideoComment(@Path("video_id") String videoId, @Path("comment_id") String commentId);

    /**
     * 获取个人主页的默认背景图列表
     */
    @GET("users/background_images")
    Observable<ArrayList<BackgroundImageEntity>> getBackgroundImages();

    /**
     * 获取头像挂件分类列表
     */
    @GET("users/icon_borders/categories")
    Single<ArrayList<AvatarBorderCategoryEntity>> getPendantCategories();

    /**
     * 获取头像挂件列表
     */
    @GET("users/icon_borders")
    Single<ArrayList<AvatarBorderEntity>> getPendants(@Query("filter") String filter);

    /**
     * 获取默认头像列表
     */
    @GET("users/icons")
    Observable<ArrayList<DefaultAvatar>> getDefaultAvatars();

    /**
     * 记录设备下载的模拟器游戏
     */
    @POST("devices/{device_id}/download_simulator_games")
    Single<ResponseBody> downloadSimulatorGames(@Path("device_id") String deviceId, @Body RequestBody body);

    /**
     * 批量添加本地模拟器游戏列表
     */
    @PUT("devices/{device_id}/download_simulator_games")
    Single<ResponseBody> putDownloadSimulatorGames(@Path("device_id") String deviceId, @Body RequestBody body);

    /**
     * 删除设备下载模拟器游戏的记录
     */
    @DELETE("devices/{device_id}/download_simulator_games/{game_id}")
    Single<ResponseBody> deleteSimulatorGame(@Path("device_id") String deviceId, @Path("game_id") String gameId);

    /**
     * 批量删除设备下载模拟器游戏的记录
     */
    @POST("devices/{device_id}/download_simulator_games:batch_delete")
    Single<ResponseBody> deleteSimulatorGames(@Path("device_id") String deviceId, @Body RequestBody body);

    /**
     * 删除设备所有模拟器游戏的记录
     */
    @POST("devices/{device_id}/download_simulator_games:batch_delete?type=all")
    Single<ResponseBody> deleteAllSimulatorGame(@Path("device_id") String deviceId);

    /**
     * 启动设备上的模拟器游戏
     */
    @POST("devices/{device_id}/played_simulator_games")
    Single<ResponseBody> playedSimulatorGames(@Path("device_id") String deviceId, @Body RequestBody body);

    /**
     * 获取后台模拟器列表
     */
    @GET("games/simulators")
    Single<List<SimulatorEntity>> getSimulators();

    /**
     * 获取设备下载的模拟器游戏的类型
     */
    @GET("devices/{device_id}/simulator_types")
    Single<List<String>> getDeviceSimulatorTypes(@Path("device_id") String deviceId);

    /**
     * 获取设备下载的模拟器游戏列表
     */
    @GET("devices/{device_id}/download_simulator_games?page_size=40")
    Single<List<GameEntity>> getSimulatorGames(@Path("device_id") String deviceId, @Query("page") int page, @Query("filter") String filter);

    /**
     * 搜索用户
     */
    @GET("./users:search")
    Observable<List<FollowersOrFansEntity>> searchUsers(@Query("keyword") String keyword, @Query("page") int page);

    /**
     * 置顶评论
     */
    @POST("communities/articles/comments/{comment_id}:set-top")
    Observable<ResponseBody> postArticleCommentTop(@Path("comment_id") String commentId, @QueryMap Map<String, Object> params);

    /**
     * 取消置顶评论
     */
    @POST("communities/articles/comments/{comment_id}:unset-top")
    Observable<ResponseBody> postArticleCommentUnTop(@Path("comment_id") String commentId);

    /**
     * 获取推荐的论坛
     */
    @POST("users/{user_id}/recommends/bbses")
    Observable<List<ForumEntity>> getRecommendForum(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 获取推荐的论坛（未登录）
     */
    @POST("recommends/bbses")
    Observable<List<ForumEntity>> getRecommendForumNotLoggedIn(@Body RequestBody body);

    /**
     * 论坛首页搜索
     */
    @GET("./bbses:search")
    Observable<Response<List<AnswerEntity>>> searchForumContent(@QueryMap HashMap<String, String> map,
                                                                @Query("page") int page,
                                                                @Query("page_size") int pageSize);

    /**
     * 获取精选分类
     */
    @GET("catalogs/{catalog_id}/special")
    Single<List<SpecialCatalogEntity>> getSpecialCatalogs(@Path("catalog_id") String catalogId, @Query("page") int page);

    /**
     * 新增一个问题草稿
     */
    @POST("users/{user_id}/bbses/question_drafts")
    Single<ResponseBody> addQuestionDraft(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 获取单个问题草稿
     */
    @GET("users/{user_id}/bbses/question_drafts/{draft_id}")
    Single<QuestionDraftEntity> getQuestionDraft(@Path("user_id") String userId, @Path("draft_id") String draftId);

    /**
     * 修改一个问题草稿
     */
    @PUT("users/{user_id}/bbses/question_drafts/{draft_id}")
    Single<ResponseBody> updateQuestionDraft(@Path("user_id") String userId, @Path("draft_id") String draftId, @Body RequestBody body);

    /**
     * 获取问题草稿列表
     */
    @GET("users/{user_id}/bbses/question_drafts")
    Observable<List<QuestionDraftEntity>> getQuestionDrafts(@Path("user_id") String userId);

    /**
     * 删除单个问题草稿
     */
    @DELETE("users/{user_id}/bbses/question_drafts/{draft_id}")
    Observable<ResponseBody> deleteQuestionDraft(@Path("user_id") String userId, @Path("draft_id") String draftId);

    /**
     * 举报用户
     */
    @POST("users/{user_id}:report")
    Single<ResponseBody> reportUser(@Path("user_id") String userId, @Body RequestBody body);

    /**
     * 获取新分类2.0侧边栏
     */
    @GET("categories_v2/{category_id}/sidebars")
    Single<SidebarsEntity> getSidebars(@Path("category_id") String categoryId);

    /**
     * 获取新分类2.0分类目录
     */
    @GET("categories_v2/{category_id}/directories")
    Single<List<CategoryEntity>> getCategoryDirectories(@Path("category_id") String categoryId);

    /**
     * 获取新分类2.0精选分类
     */
    @GET("categories_v2/{category_id}/choiceness")
    Single<List<SpecialCatalogEntity>> getSpecialCategories(@Path("category_id") String categoryId, @Query("page") int page);

    /**
     * 获取新分类2.0游戏列表
     */
    @GET("categories_v2/{category_id}/games")
    Single<List<GameEntity>> getCategoryV2Games(@Path("category_id") String categoryId,
                                                @Query("filter") String filter,
                                                @Query("sort") String sort,
                                                @Query("AD") String ad,
                                                @Query("page") int page);

    /**
     * 获取游戏详情推荐弹窗
     */
    @GET("games/recommend_popup")
    Single<ArrayList<RecommendPopupEntity>> getRecommendPopup(@Query("gameId") String gameId);


    /**
     * 判断新老用户
     */
    @POST("mark")
    Single<ResponseBody> postMark(@Body RequestBody body);

    /**
     * 举报社区帖子内容
     */
    @POST("bbses/contents/{content_id}:report")
    Single<ResponseBody> postBbsReport(@Path("content_id") String contentId, @Body RequestBody requestBody);

    /**
     * 论坛视频投稿
     */
    @POST("bbses/videos")
    Observable<JsonObject> postBbsVideo(@Body RequestBody body);

    /**
     * 修改论坛视频
     */
    @POST("bbses/videos/{video_id}")
    Observable<ResponseBody> patchBbsVideo(@Path("video_id") String videoId, @Body RequestBody body);

    /**
     * 发帖子/问题插入视频
     */
    @POST("bbses/insert_videos")
    Observable<JsonObject> insertVideo(@Body RequestBody body);

    /**
     * 修改帖子/问题视频
     */
    @POST("bbses/insert_videos/{video_id}")
    Observable<ResponseBody> patchInsertVideo(@Path("video_id") String videoId, @Body RequestBody body);

    /**
     * 获取论坛视频详情
     */
    @GET("bbses/videos/{video_id}?view=detail")
    Observable<ForumVideoEntity> getBbsVideoDetail(@Path("video_id") String videoId);

    /**
     * 提交社区已读
     */
    @POST("bbses/{bbs_id}/enter_logs")
    Single<ResponseBody> postForumRead(@Path("bbs_id") String forumId);

    /**
     * 获取社区的未读状态
     */
    @POST("bbses/unread")
    Single<List<ForumUnreadEntity>> getForumUnreadStatus(@Body RequestBody body);

    /**
     * 获取视频详情推荐视频
     */
    @GET("bbses/videos/{video_id}/recommends")
    Observable<List<ForumVideoEntity>> getRecommendVideo(@Path("video_id") String videoId, @Query("page") int page);

    /**
     * 添加问题收藏
     */
    @POST("users/{user_id}/favorites/bbses/questions/{question_id}")
    Single<ResponseBody> favoriteQuestion(@Path("user_id") String userId, @Path("question_id") String questionId);

    /**
     * 取消问题收藏
     */
    @DELETE("users/{user_id}/favorites/bbses/questions/{question_id}")
    Single<ResponseBody> deleteFavoriteQuestion(@Path("user_id") String userId, @Path("question_id") String questionId);

    /**
     * 问题评论（回答）列表
     */
    @GET("bbses/questions/{question_id}/comments")
    Observable<retrofit2.Response<JsonArray>> getQuestionComment(@Path("question_id") String questionId, @Query("sort") String type, @Query("page") int page, @QueryMap Map<String, Object> params);

    /**
     * 对社区问题发布评论（回答）
     */
    @POST("bbses/questions/{question_id}/comments")
    Observable<ResponseBody> postQuestionComment(@Path("question_id") String questionsId, @Body RequestBody body);


    /**
     * 回复社区问题评论（回答）
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:reply")
    Observable<ResponseBody> postReplyToQuestionComment(@Path("question_id") String questionsId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 获取问题评论（回答）
     */
    @GET("bbses/questions/{question_id}/comments/{comment_id}")
    Single<CommentEntity> getCommunityQuestionComment(@Path("question_id") String questionId, @Path("comment_id") String commentId);

    /**
     * 获取问题评论（回答）的回复（评论）列表
     */
    @GET("bbses/questions/{question_id}/comments/{comment_id}/replies")
    Single<List<CommentEntity>> getQuestionCommentReply(@Path("question_id") String questionId,
                                                        @Path("comment_id") String commentId,
                                                        @Query("sort") String sort,
                                                        @Query("page") int page,
                                                        @QueryMap Map<String, Object> params);

    /**
     * 点赞问题评论（回答）
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:vote")
    Observable<ResponseBody> postVoteQuestionComment(@Path("question_id") String questioIid, @Path("comment_id") String commentId);

    /**
     * 投诉问题的评论
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:report")
    Observable<ResponseBody> postQuestionCommentReport(@Path("question_id") String questionId, @Path("comment_id") String commentId, @Body RequestBody reportData);

    /**
     * 删除问题评论
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:hide")
    Single<ResponseBody> deleteQuestionComment(@Path("question_id") String questionId, @Path("comment_id") String commentId);

    /**
     * 置顶问题评论
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:set-top")
    Observable<ResponseBody> postQuestionCommentTop(@Path("question_id") String questionId, @Path("comment_id") String commentId, @QueryMap Map<String, Object> params);

    /**
     * 取消问题置顶评论
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:unset-top")
    Observable<ResponseBody> postQuestionCommentUnTop(@Path("question_id") String questionId, @Path("comment_id") String commentId);

    /**
     * 获取社区活动分类列表
     */
    @GET("videos/activities/category")
    Single<List<ForumActivityCategoryEntity>> getForumActivityCategories();

    /**
     * 获取社区活动列表
     */
    @GET("videos/activities")
    Single<List<ForumActivityEntity>> getForumActivities(@Query("category_id") String categoryId, @Query("page") int page);

    /**
     * 获取单条视频评论
     */
    @GET("videos/comments/{comment_id}")
    Single<CommentEntity> getCommunityVideoComment(@Path("comment_id") String commentId);

    /**
     * 获取视频评论回复
     */
    @GET("videos/{video_id}/comments/{comment_id}/replies")
    Single<List<CommentEntity>> getVideoCommentReply(@Path("video_id") String videoId,
                                                     @Path("comment_id") String commentId,
                                                     @Query("sort") String sort,
                                                     @Query("page") int page,
                                                     @QueryMap Map<String, Object> params);

    /**
     * 加精视频贴
     */
    @POST("bbses/videos/{video_id}:moderator_choiceness")
    Observable<ResponseBody> highlightCommunityVideo(@Path("video_id") String videoId);

    /**
     * 取消加精视频贴
     */
    @POST("bbses/videos/{video_id}:cancel_choiceness")
    Observable<ResponseBody> cancelHighlightCommunityVideo(@Path("video_id") String videoId);

    /**
     * 申请加精视频贴
     */
    @POST("bbses/videos/{video_id}:choiceness")
    Observable<ResponseBody> applyHighlightCommunityVideo(@Path("video_id") String videoId);

    /**
     * 申请加精帖子
     */
    @POST("communities/articles/{article_id}:choiceness")
    Observable<ResponseBody> applyHighlightCommunityArticle(@Path("article_id") String articleId);

    /**
     * 版主修改社区文章活动标签
     */
    @POST("communities/articles/{article_id}/activity_tags")
    Observable<ResponseBody> modifyArticleActivityTag(@Path("article_id") String articleId, @Body RequestBody body);

    /**
     * 版主修改视频帖活动标签
     */
    @POST("bbses/{bbsId}/videos/{video_id}/activity_tags")
    Observable<ResponseBody> modifyVideoActivityTag(@Path("bbsId") String bbsId, @Path("video_id") String videoId, @Body RequestBody body);

    /**
     * 提问贴解决问题
     */
    @POST("questions/{question_id}/finish_question")
    Observable<ResponseBody> solveQuestion(@Path("question_id") String questionId, @Body RequestBody body);

    /**
     * 提问贴采纳回答
     */
    @POST("questions/{question_id}/answers/{answer_id}:accept")
    Observable<ResponseBody> acceptQuestionComment(@Path("question_id") String questionId, @Path("answer_id") String answerId, @Body RequestBody body);

    /**
     * 首次启动跳转
     */
    @GET("app/first_jump")
    Single<LaunchRedirectWrapper> getLaunchRedirect(@Query("version") String version, @Query("channel") String channel);

    /**
     * 获取引导浮窗
     */
    @GET("api_go/games/guide_popup")
    Single<GameGuidePopupEntity> getGameGuidePopup(
            @Query("manufacture") String manufacture,
            @Query("android_version") String systemVersion,
            @Query("model") String model,
            @Query("channel") String channel,
            @Query("api_version") String apiVersion);

    /**
     * 获取论坛热门搜索列表
     */
    @GET("bbses/hot_searches")
    Observable<ArrayList<SettingsEntity.HotSearch>> getHotSearches();

    /**
     * 获取论坛搜索的热门内容
     */
    @GET("bbses/search/hot_content")
    Observable<ArrayList<SettingsEntity.Search.RankList.RankContent>> getHotContent();


    /**
     * 获取通用集合详情
     */
    @GET("home/common_collection/{collection_id}")
    Observable<CommonCollectionEntity> getCommonCollectionDetail(@Path("collection_id") String collectionId);

    /**
     * 获取通用集合详情
     */
    @GET("home/common_collection/{collection_id}/contents")
    Observable<List<CommonCollectionContentEntity>> getCommonCollectionDetail(@Path("collection_id") String collectionId, @Query("page") int page);

    /**
     * 获取通用内容合集详情-推荐卡片分页数据
     */
    @GET("home/common_collection/{collection_id}/contents")
    Observable<List<CustomPageData.RecommendCard>> getCommonCollectionDetailWithRecommenCards(@Path("collection_id") String collectionId, @Query("page") int page);

    /**
     * 获取青少年模式状态
     */
    @GET("api_go/teen_mode/status")
    Single<ResponseBody> getTeenagerMode(@Query("android_id") String gid);

    /**
     * 青少年模式加锁
     */
    @POST("api_go/teen_mode/lock")
    Single<ResponseBody> postTeenModeLock(@Body RequestBody body);

    /**
     * 青少年模式解锁
     */
    @POST("api_go/teen_mode/unlock")
    Single<ResponseBody> postTeenModeUnlock(@Body RequestBody body);

    /**
     * 退出青少年模式
     */
    @POST("api_go/teen_mode/logout")
    Single<ResponseBody> postTeenModeLogout(@Body RequestBody body);

    /**
     * 修改青少年模式密码
     */
    @PUT("api_go/teen_mode/password")
    Single<ResponseBody> putTeenModePassword(@Body RequestBody body);

    /**
     * 游戏单列表(返回所有数据)
     */
    @GET("users/{user_id}/game_lists?view=draft")
    Observable<List<GamesCollectionEntity>> getGameCollectionList(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 创建游戏单
     */
    @POST("game_lists")
    Observable<ResponseBody> createGameCollection(@Body RequestBody body);

    /**
     * 编辑游戏单
     */
    @PUT("game_lists/{game_list_id}")
    Observable<ResponseBody> patchGameCollection(@Body RequestBody body, @Path("game_list_id") String id);

    /**
     * 游戏单详情(用户编辑自己的游戏单时调用)
     */
    @GET("game_lists/{game_list_id}?view=draft")
    Observable<GamesCollectionEntity> getGameCollectionDetailForDraft(@Path("game_list_id") String id);

    /**
     * 删除单条游戏单数据
     */
    @DELETE("game_lists/{game_list_id}")
    Observable<ResponseBody> deleteGameCollection(@Path("game_list_id") String id);

    /**
     * 提交审核 (投稿)
     */
    @POST("game_lists/{game_list_id}:submit")
    Observable<ResponseBody> publishGameCollection(@Path("game_list_id") String id);

    /**
     * 用户游戏单列表
     */
    @GET("users/{user_id}/game_lists")
    Single<List<GamesCollectionEntity>> getUserGameCollectionList(@Path("user_id") String userId, @QueryMap Map<String, Object> params);

    /**
     * 游戏单详情
     */
    @GET("game_lists/{game_list_id}")
    Single<GamesCollectionDetailEntity> getGameCollectionDetail(@Path("game_list_id") String id);

    /**
     * 获取游戏单广场列表
     */
    @GET("game_lists")
    Single<List<GamesCollectionEntity>> getGameCollectionSquareList(@Query("view") String view, @Query("page") int page, @Query("page_size") int pageSize, @QueryMap Map<String, Object> params);

    /**
     * 获取游戏单标签列表
     */
    @GET("game_lists/tags")
    Single<ArrayList<GameCollectionTagEntity>> getGameCollectionTagList();

    /**
     * 获取用户收藏的游戏单列表
     */
    @GET("users/{user_id}/favorites/game_list")
    Single<List<GamesCollectionEntity>> getFavoriteGameCollectionList(@Path("user_id") String userId, @Query("page") int page);

    /**
     * 添加游戏单收藏
     */
    @POST("users/{user_id}/favorites/game_list/{game_list_id}")
    Single<ResponseBody> favoriteGameCollection(@Path("user_id") String userId, @Path("game_list_id") String id);

    /**
     * 取消游戏单收藏
     */
    @DELETE("users/{user_id}/favorites/game_list/{game_list_id}")
    Single<ResponseBody> deleteFavoriteGameCollection(@Path("user_id") String userId, @Path("game_list_id") String id);

    /**
     * 点赞游戏单
     */
    @POST("game_lists/{game_list_id}:vote")
    Single<ResponseBody> voteGameCollection(@Path("game_list_id") String id);

    /**
     * 取消点赞游戏单
     */
    @POST("game_lists/{game_list_id}:unvote")
    Single<ResponseBody> unVoteGameCollection(@Path("game_list_id") String id);

    /**
     * 分享游戏单统计
     */
    @POST("game_lists/{game_list_id}:share")
    Single<ResponseBody> shareGameCollection(@Path("game_list_id") String gameCollectionId);

    /**
     * 获取首页tab游戏单广场列表
     */
    @GET("game_lists?view=hot")
    Single<List<GamesCollectionEntity>> getHomeGameCollectionSquareList(@Query("random") String id, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 游戏单评论列表
     */
    @GET("api_go/game_list/{game_list_id}/comment")
    Single<retrofit2.Response<JsonArray>> getGameCollectionComments(@Path("game_list_id") String id,
                                                                    @Query("page") int page,
                                                                    @QueryMap Map<String, Object> params);

    /**
     * 获取单条游戏单评论
     */
    @GET("api_go/game_list/{game_list_id}/comment/{comment_id}")
    Single<CommentEntity> getGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId);

    /**
     * 获取游戏单评论的回复列表
     */
    @GET("api_go/game_list/{game_list_id}/comment/{comment_id}/reply")
    Single<List<CommentEntity>> getGameCollectionCommentReply(@Path("game_list_id") String gameCollectionId,
                                                              @Path("comment_id") String commentId,
                                                              @Query("page") int page,
                                                              @QueryMap Map<String, Object> params);

    /**
     * 游戏单添加评论
     */
    @POST("api_go/game_list/{game_list_id}/comment")
    Observable<ResponseBody> postGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Body RequestBody body);

    /**
     * 点赞游戏单评论
     */
    @POST("api_go/game_list/{game_list_id}/comment/{comment_id}/like")
    Single<ResponseBody> voteGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId);

    /**
     * 举报游戏单评论
     */
    @POST("api_go/game_list/{game_list_id}/comment/{comment_id}/report")
    Observable<ResponseBody> reportGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 回复游戏单评论
     */
    @POST("api_go/game_list/{game_list_id}/comment/{comment_id}")
    Observable<ResponseBody> postReplyToGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId, @Body RequestBody body);

    /**
     * 删除游戏单评论
     */
    @DELETE("api_go/game_list/{game_list_id}/comment/{comment_id}")
    Observable<ResponseBody> deleteGameCollectionComment(@Path("game_list_id") String gameCollectionId, @Path("comment_id") String commentId);

    /**
     * 获取浏览器安装说明url
     */
    @GET("install_method/browser_help")
    Single<ResponseBody> getBrowserHintUrl(@Query("manufacturer") String manufacturer);

    /**
     * 游戏单-随机获取封面图
     */
    @GET("game_lists/random-cover")
    Observable<List<GameCollectionCoverEntity>> getRandomCover();

    /**
     * 提交已安装应用列表，获取已收录部分
     */
    @POST("./packages:check")
    Single<PackageFilter> postInstalledAppList(@Body RequestBody body);

    /**
     * 获取包名游戏列表
     */
    @GET("packages/keys/{key}")
    Single<ArrayList<PackageGame>> getPackageGames(@Path("key") String key, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 游戏任务-下载完成/预约成功:增加抽奖次数（未登录状态下）
     */
    @POST("activity_pages/no-login/task/{game_id}")
    Single<ResponseBody> postGameActivityTaskForNoLogin(@Path("game_id") String gameId);

    /**
     * 游戏任务-下载完成/预约成功:增加抽奖次数（登录状态下）
     */
    @POST("activity_pages/task/{game_id}")
    Single<ResponseBody> postGameActivityTask(@Path("game_id") String gameId);

    /**
     * 游戏活动-判断是否下载完成
     */
    @GET("activity_pages/download-done/{activity_id}")
    Single<ResponseBody> getDownloadDone(@Path("activity_id") String activityId);

    /**
     * 获取游戏单活动标签列表
     */
    @GET("game_lists/activity/tags")
    Single<ArrayList<ActivityLabelEntity>> getGameCollectionActivityLabelList();


    /**
     * 游戏单广场-获取轮播图
     */
    @GET("game_lists/carousel")
    Single<List<CarouselEntity>> getGameCollectionSquareBanner();

    /**
     * 取消回答点赞
     */
    @POST("bbses/questions/{question_id}/comments/{comment_id}:unvote")
    Observable<ResponseBody> postUnVoteQuestionComment(@Path("question_id") String questionId, @Path("comment_id") String commentId);

    /**
     * 取消视频帖评论点赞
     */
    @POST("videos/{video_id}/comments/{comment_id}:unvote")
    Observable<ResponseBody> postUnVoteVideoComment(@Path("video_id") String videoId, @Path("comment_id") String commentId);

    /**
     * 取消帖子评论点赞
     */
    @POST("communities/articles/comments/{comment_id}:unvote")
    Observable<ResponseBody> postUnVoteArticleComment(@Path("comment_id") String commentId);

    /**
     * 置顶视频评论
     */
    @POST("videos/comments/{comment_id}:set-top")
    Observable<ResponseBody> postVideoCommentTop(@Path("comment_id") String commentId, @QueryMap Map<String, Object> params);

    /**
     * 取消视频置顶评论
     */
    @POST("videos/comments/{comment_id}:unset-top")
    Observable<ResponseBody> postVideoCommentUnTop(@Path("comment_id") String commentId);

    /**
     * 求版本上传apk后回调
     */
    @POST("games/platform_requests/{platform_requests_id}/apk")
    Observable<ResponseBody> postPlatformRequestApk(@Path("platform_requests_id") String platformRequestsId, @Body RequestBody body);

    /**
     * 获取第三方下载链接
     */
    @GET("games/{game_id}/third_party_address")
    Observable<JsonObject> getThirdPartyAddress(@Path("game_id") String gameId);

    /**
     * 展示社区交流身份认证开关
     */
    @GET("certification/switch")
    Single<JsonObject> getCertificationSwitch();

    /**
     * 关联手机号
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("./mobile_auth:bind")
    Single<ResponseBody> verifyPhone(@Query("step") int step, @Body RequestBody body);

    /**
     * 解除关联手机号
     */
    @POST("mobile_auth/{user_id}:unbind")
    Single<ResponseBody> unBindPhone();

    /**
     * 获取发现页游戏列表
     */
    @GET("home/explore/games")
    Observable<DiscoveryGameCardEntity> getDiscoveryGames(@Query("page") int page, @QueryMap Map<String, Object> params);

    /**
     * 获取发现页卡片列表
     */
    @GET("home/explore/cards")
    Observable<ArrayList<DiscoveryGameCardLabel>> getCardLabels();

    /**
     * 反馈游戏
     */
    @POST("home/explore/games/{game_id}/feedback")
    Single<ResponseBody> discorveryFeedback(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 评论游戏-获取草稿
     */
    @GET("games/{game_id}/comments/draft")
    Single<RatingDraftEntity> getRatingDraft(@Path("game_id") String gameId);

    /**
     * 评论游戏-保存草稿
     */
    @POST("games/{game_id}/comments/draft")
    Single<ResponseBody> saveRatingDraft(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 评论游戏-删除草稿
     */
    @DELETE("games/{game_id}/comments/draft")
    Single<ResponseBody> deleteRatingDraft(@Path("game_id") String gameId);

    /**
     * 获取游戏存档-列表
     */
    @GET("games/{game_id}/archives")
    Single<List<ArchiveEntity>> getGameArchives(@Path("game_id") String gameId, @Query("page") int page, @QueryMap Map<String, Object> params);

    /**
     * 获取我的存档列表
     */
    @GET("users/games/{game_id}/archives")
    Observable<List<ArchiveEntity>> getMyArchives(@Path("game_id") String gameId, @Query("page") int page, @Query("sort") String sort);

    /**
     * 创建我的存档
     */
    @POST("users/games/{game_id}/archives")
    Single<ResponseBody> postMyArchive(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 使用存档
     */
    @POST("/games/{game_id}/archives/{archive_id}/usage")
    Single<ResponseBody> postArchiveUsage(@Path("game_id") String gameId, @Path("archive_id") String archiveId);

    /**
     * 获取我的分享存档列表
     */
    @GET("users/games/{game_id}/archives/share")
    Observable<List<ArchiveEntity>> getMyShareArchives(@Path("game_id") String gameId, @Query("page") int page, @Query("sort") String sort);

    /**
     * 编辑我的存档
     */
    @PATCH("users/games/{game_id}/archives/{archive_id}")
    Single<ResponseBody> patchMyArchive(@Path("game_id") String gameId, @Path("archive_id") String archiveId, @Body RequestBody body);

    /**
     * 删除我的存档
     */
    @DELETE("users/games/{game_id}/archives/{archive_id}")
    Single<ResponseBody> deleteMyArchive(@Path("game_id") String gameId, @Path("archive_id") String archiveId);

    /**
     * 游戏存档-推荐游戏数据
     */
    @GET("columns/game_archive/games")
    Single<List<GameEntity>> gameSaveRecommendGameList(@Query("page") int page);

    /**
     * 获取支持存档的游戏列表
     */
    @POST("games/archives/configs")
    Observable<List<ArchiveEntity>> getGamesArchiveConfigs(@Body RequestBody body);

    /**
     * 同步下载的存档
     */
    @POST("/users/games/{game_id}/archives/{archive_id}/download")
    Single<ResponseBody> syncGameArchive(@Path("game_id") String gameId, @Path("archive_id") String archiveId);

    /**
     * 删除已同步的下载存档
     */
    @DELETE("/users/games/{game_id}/archives/{archive_id}/download")
    Single<ResponseBody> deleteSyncedGameArchive(@Path("game_id") String gameId, @Path("archive_id") String archiveId);

    /**
     * 批量同步已下载的存档
     */
    @POST("/users/games/{game_id}/archives/download")
    Single<ResponseBody> syncGameArchives(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 获取存档下载记录
     */
    @GET("/users/games/{game_id}/archives/download/histories")
    Single<List<ArchiveEntity>> getArchivesDownloadHistories(@Path("game_id") String gameId, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 获取偏好设置(分类标签)的配置数据及用户状态
     */
    @GET("user/_interested_game")
    Single<InterestedGameEntity> getInterestedGame();

    /**
     * 更新用户偏好设置
     */
    @PUT("user/_interested_game")
    Single<ResponseBody> postInterestedGame(@Body RequestBody body);

    /**
     * 根据ids批量获取游戏digest
     */
    @GET("games")
    Observable<List<GameEntity>> getGamesDigestByIds(@Query("filter") String filter);

    /**
     * 获取专题游戏 用于游戏详情换一批
     */
    @GET("columns/{column_id}/games?sort=publish%3A-1&filter=type:全部,tags:全部")
    Observable<retrofit2.Response<JsonArray>> getSubjectGame(@Path("column_id") String columnId, @Query("page") int page);

    /**
     * 游戏存档-获取状态，用于判断云存档数据列表是否有新增数据
     */
    @GET("games/{game_id}/archives/status")
    Single<ResponseBody> getArchiveStatus(@Path("game_id") String gameId);

    /**
     * 新游开测-详情列表页-时间轴起始点
     */
    @GET("columns/tests/v2/start_point")
    Observable<StartPointEntity> getStartPoint(@Query("filter") String filter);

    /**
     * 新游开测-详情列表（含分页）
     */
    @GET("columns/tests/v2")
    Observable<GameServerTestV2Entity> getServerTestV2(@Query("filter") String filter);

    /**
     * 新游开测-详情列表
     */
    @GET("app/column_test_v2/{link_id}/games")
    Observable<List<ServerTestEntity.SliceData>> getServerTestV2Detail(@Path("link_id") String linkId, @Query("category") String category);

    /**
     * 自定义页面组件-新游开测
     */
    @GET("app/column_test_v2/{link_id}")
    Observable<List<GameData>> getCustomPageServerTestV2(@Path("link_id") String linkId, @QueryMap Map<String, Object> params);


    /**
     * 首页内容-新游开测-游戏列表（含分页）
     */
    @GET("home/columns/tests/v2")
    Observable<HomeItemTestV2Entity> getHomeServerTestV2(
            @Query("version") String version,
            @Query("channel") String channel,
            @Query("limit") int limit,
            @Query("filter") String filter
    );

    /**
     * 游戏单热榜-游戏单榜单tab
     */
    @GET("game_lists/collections/hot_list/tab")
    Observable<List<GameCollectionListEntity>> getGameCollectionHotListTab();

    /**
     * 游戏单热榜-玩家创作榜
     */
    @GET("game_lists/collections/hot_list/player_creation")
    Observable<GameCollectionPlayerCreationEntity> getGameCollectionPlayerCreation(@Query("is_week") boolean isWeek);

    /**
     * 游戏单热榜-游戏单数据
     */
    @GET("game_lists/collections/hot_list/{collection_id}")
    Observable<List<GamesCollectionEntity>> getGameCollectionHotList(@Path("collection_id") String collectionId);

    /**
     * 游戏单合集-游戏单列表(适用首页/板块-游戏单合集-刷新轮换-竖排列表/横排列表)
     */
    @GET("game_lists/collections/{collection_id}")
    Observable<List<HomeGameCollectionEntity>> getGameCollectionRefresh(@Path("collection_id") String collectionId, @Query("view") String view, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 求加速
     */
    @POST("users/{user_id}/game/{game_id}/request_speed")
    Observable<ResponseBody> postRequestSpeed(@Path("user_id") String userId, @Path("game_id") String gameId);

    /**
     * 插件上架提醒-气泡弹窗列表
     */
    @GET("users/{user_id}/request_versions/vote/popup")
    Observable<List<GameEntity>> getAccelerateNotificationPopup(@Path("user_id") String userId);

    /**
     * QQ/微信小游戏-搜索
     */
    @GET("mini_game/search")
    Observable<List<GameEntity>> getSearchMiniGameList(@Query("keyword") String keyword,
                                                       @Query("page") int page,
                                                       @Query("page_size") int pageSize);

    /**
     * QQ/微信小游戏-最近在玩
     */
    @GET("mini_game/recently_played/{game_type}")
    Single<List<GameEntity>> getRecentPlayedMiniGameList(@Path("game_type") String gameType);

    /**
     * QQ小游戏-专题列表
     */
    @GET("games/qq_mini/columns")
    Observable<List<SubjectEntity>> getSubjectQGameList();

    /**
     * QQ小游戏-专题-换一换
     */
    @GET("games/qq_mini/columns/{column_id}/games?page=2&page_size=30")
    Observable<List<GameEntity>> getSubjectQGame(@Path("column_id") String columnId);

    /**
     * QQ小游戏-专题游戏列表
     */
    @GET("games/qq_mini/columns/{column_id}/games")
    Single<List<GameEntity>> getQGameColumn(@Path("column_id") String columnId,
                                            @Query("filter") String order,
                                            @Query("page") int page,
                                            @Query("page_size") int pageSize);

    /**
     * QQ小游戏-游玩记录
     */
    @POST("/games/qq_mini/{appid}/user/{user_id}")
    Single<ResponseBody> postQGamePlay(@Path("appid") String qqGameId, @Path("user_id") String userId);

    /**
     * QQ小游戏-专题数据详情
     */
    @GET("/games/qq_mini/columns/{column_id}/setting")
    Observable<SubjectSettingEntity> getQGameColumnSettings(@Path("column_id") String column_id);

    /**
     * 微信小游戏-专题数据详情
     */
    @GET("/wechat_game/columns/{column_id}/setting")
    Observable<SubjectSettingEntity> getWGameColumnSettings(@Path("column_id") String column_id);

    /**
     * 微信小游戏-专题-换一换
     */
    @GET("wechat_game/columns/{column_id}/games?page=2&page_size=30")
    Observable<List<GameEntity>> getSubjectWGame(@Path("column_id") String columnId);

    /**
     * 微信小游戏-专题游戏列表
     */
    @GET("wechat_game/columns/{column_id}/games")
    Single<List<GameEntity>> getWGameColumn(@Path("column_id") String columnId,
                                            @Query("filter") String order,
                                            @Query("page") int page,
                                            @Query("page_size") int pageSize);

    /**
     * 微信小游戏-游玩记录
     */
    @POST("/wechat_game/{appid}/user/{gid}")
    Single<ResponseBody> postWGamePlay(@Path("appid") String wechatGameId, @Path("gid") String gid);

    /**
     * 获取广告配置
     */
    @GET("ad_spaces")
    Single<ArrayList<AdConfig>> getAdConfig(@QueryMap Map<String, Object> params);

    /**
     * 获取广告游戏信息
     */
    @GET("ad_spaces/{ad_id}/games")
    Single<List<GameEntity>> getAdGames(@Path("ad_id") String id, @QueryMap Map<String, Object> params);

    /**
     * 消息中心-未读消息数量
     */
    @GET("messages/count/unread")
    Single<MessageUnreadCount> getMessageUnreadCount();

    /**
     * 用户-已获得认证列表
     */
    @GET("users/{user_id}/authentication")
    Single<List<UserAuthEntity>> getUserAuthList(@Path("user_id") String userId, @Query("refresh") boolean refresh);

    /**
     * 用户-切换佩戴认证
     */
    @POST("users/{user_id}/authentication/{auth_id}")
    Single<ResponseBody> postUserAuth(@Path("user_id") String userId, @Path("auth_id") String authId);

    /**
     * 替换存档
     */
    @POST("/users/games/{gameId}/archives/{archiveId}/replace")
    Single<ResponseBody> replaceArchive(@Path("gameId") String gameId, @Path("archiveId") String archiveId, @Body RequestBody body);

    /**
     * 游戏开服-加入订阅
     */
    @POST("games/{game_id}/servers/subscriptions")
    Observable<ResponseBody> subscribeServer(@Path("game_id") String gameId);

    /**
     * 游戏开服-获取订阅状态
     */
    @GET("games/{game_id}/servers/subscriptions")
    Single<ServerSubscriptionEntity> getServerSubscription(@Path("game_id") String gameId);

    /**
     * 游戏开服-取消订阅
     */
    @DELETE("games/{game_id}/servers/subscriptions")
    Observable<ResponseBody> unsubscribeServer(@Path("game_id") String gameId);

    /**
     * 游戏开服-开服提醒-添加
     */
    @POST("games/{game_id}/server_calendar/{item_id_or_time}/notify_setting")
    Single<ResponseBody> addServerCalendarRemind(@Path("game_id") String gameId,
                                                 @Path("item_id_or_time") String itemIdOrTime,
                                                 @Body RequestBody body);

    /**
     * 游戏开服-开服提醒-取消
     */
    @DELETE("games/{game_id}/server_calendar/{item_id_or_time}/notify_setting")
    Single<ResponseBody> removeServerCalendarRemind(@Path("game_id") String gameId,
                                                    @Path("item_id_or_time") String itemIdOrTime);

    /**
     * 游戏开服-开服提醒-获取
     */
    @GET("games/{game_id}/server_calendar/{item_id_or_time}/notify_setting")
    Single<ServerCalendarNotifySetting> getServerCalendarRemind(@Path("game_id") String gameId,
                                                                @Path("item_id_or_time") String itemIdOrTime);

    /**
     * 游戏开服-获取订阅游戏列表
     */
    @GET("games/servers/subscribe_games")
    Observable<List<GameEntity>> getServersSubscribedGameList();


    /**
     * 游戏开服-开服订阅-开服表
     */
    @GET("games/servers/notify_servers")
    Single<List<ServerCalendarFormEntity>> getServerCalendarList(@Query("page") int page,
                                                                 @Query("page_size") int pageSize);

    /**
     * 游戏开服-开服订阅-开服提醒
     */
    @GET("games/servers/notify_games")
    Single<List<ServerCalendarGame>> getServerCalendarRemindList(@Query("page") int page,
                                                                 @Query("page_size") int pageSize);

    /**
     * 游戏开服-开服订阅-获取微信一次订阅消息的参数数据
     */
    @GET("messages/wechat/one_time/config")
    Single<WXSubscribeMsgConfig> getWxSubscribeMsgConfig(@Query("filter") String filter);

    /**
     * 游戏开服-开服订阅-提交微信一次订阅消息的授权结果回调
     */
    @POST("messages/wechat/one_time/call_back")
    Single<ResponseBody> postWxSubscribeMsgCallback(@Query("filter") String filter,
                                                    @Body RequestBody body);

    /**
     * 获取网游插件可能用到的签名
     */
    @GET("signs")
    Single<ArrayList<SignatureEntity>> getGhSignature();

    /**
     * 未读消息-埋点数据提供
     */
    @GET("messages/unread/event")
    Observable<List<MessageDigestEntity>> getMessageUnreadDigestList(@Query("page") int page,
                                                                     @Query("page_size") int pageSize);

    /**
     * 自定义页面列表数据
     */
    @GET("app/custom_page/{page_id}")
    Single<CustomPageData> getCustomPageData(
            @Path("page_id") String pageId,
            @Query("page") int page,
            @Query("AD") String ad);

    @GET("app/custom_page/{page_id}/suspended_window")
    Single<List<FloatingWindowEntity>> loadSuspendedWindow(
            @Path("page_id") String pageId,
            @Query("version") String version,
            @Query("channel") String channel);

    @GET("app/custom_page/{page_id}/pull_down_push")
    Single<PullDownPush> loadPullDownPush(
            @Path("page_id") String pageId,
            @Query("version") String version,
            @Query("channel") String channel);

    /**
     * 页面数据聚合[底部tab+多tab导航页+默认数据]
     */
    @GET("app/data_union")
    Single<DataUnionEntity> getDataUnion(@Query("diverter") String diverter);

    /**
     * 底部tab
     */
    @GET("app/bottom_tab")
    Single<List<BottomTab>> getHomeBottomTab();

    /**
     * 多tab导航页-详情
     */
    @GET("app/multi_tab_nav/{nav_id}")
    Single<MultiTabNav> getTabNav(@Path("nav_id") String id);

    /**
     * 专题合集-内容列表 (适用于刷新轮换)
     */
    @GET("games/columns/collections/{collection_id}/contents")
    Single<List<CustomPageData.LinkColumnCollection.CustomSubjectEntity>> getColumnsCollectionContents(@Path("collection_id") String collectionId, @Query("view") String view, @Query("page") int page, @Query("page_size") int pageSize);

    /**
     * 游戏单合集-内容列表 (适用于刷新轮换)
     */
    @GET("game_lists/collections/{collection_id}/contents")
    Single<List<CustomPageData.LinkColumnCollection.CustomSubjectEntity>> getGameCollectionContents(@Path("collection_id") String collectionId, @Query("view") String view, @Query("page") int page, @Query("page_size") int pageSize);


    /**
     * 游戏单-添加游戏-热门游戏（热门游戏专题）
     */
    @GET("game_lists/hot_columns")
    Single<List<SubjectEntity>> getHotColumns();


    @PATCH("games/{game_id}/appointment")
    Single<ReserveModifyEntity> reserveModify(@Path("game_id") String gameId, @Body RequestBody body);

    /**
     * 获取验证码
     */
    @POST("mobile/validate/code")
    Single<ValidateCodeResponse> getValidateCode(@Body HashMap<String, String> map);

    /**
     * 验证手机号
     */
    @POST("mobile/validate")
    Single<ResponseBody> mobileValidate(@Body ValidateCodeRequest request);

    /**
     * 批量操作：
     * 1.是/否 开启wifi自动下载
     * 2.取消预约
     */
    @POST("users/appointments/settings")
    Single<ResponseBody> reserveSetting(@Body RequestBody body);

    /**
     * 分流器列表信息
     */
    @GET("app/{module}/diverter")
    Single<List<DiverterEntity>> getDiverterList(@Header("Install-First-Access") String isInstallFirstAccess, @Path("module") String module);

    /**
     * 访问分流页面，更新分流访问次数
     */
    @PATCH("app/{module}/diverter_visit_time")
    Single<ResponseBody> patchDiverterVisitTime(@Path("module") String module, @Body RequestBody body);

    /**
     * 游戏单搜索(复用 游戏单合集-内容列表 (适用于刷新轮换) 接口实体)
     */
    @GET("game_lists/search")
    Single<List<CustomPageData.LinkColumnCollection.CustomSubjectEntity>> searchGameList(@Query("keyword") String keyword, @Query("page") int page);

    /**
     * 新游开测-置顶游戏
     */
    @GET("app/column_test_v2/{link_id}/top_games")
    Observable<List<GameServerTestTopGame>> getServerTestV2TopGames(@Path("link_id") String linkId);

    /**
     * 获取广告标识
     */
    @POST("idfa")
    Single<IdfaData> getIdfa(@Query("version") String version, @Query("channel") String channel);

    /**
     * 游戏详情页-获取详情页配置(触发下载定位/组件顺序)
     */
    @GET("game_detail/{game_id}/setting")
    Single<GameDetailSetting> getGameDetailSetting(@Path("game_id") String gameId, @QueryMap Map<String, Object> params);

    /**
     * 游戏详情页-顶部tab
     */
    @GET("game_detail/{game_id}/tab")
    Single<List<GameDetailTabEntity>> getGameDetailTab(@Path("game_id") String gameId, @QueryMap Map<String, Object> params);

    /**
     * 游戏详情页-游戏专区数据
     */
    @GET("game_detail/{game_id}/zone")
    Single<ZoneEntity> getGameDetailZone(@Path("game_id") String gameId);

    /**
     * 组件-PK（非页面固定数据）
     */
    @POST("app/pk")
    Single<List<PKEntity>> getPKList(@Body RequestBody body);

    /**
     * 组件-PK-投票
     */
    @POST("app/pk/{pk_id}")
    Single<ResponseBody> postPK(@Path("pk_id") String pkId, @Body RequestBody body);

    /**
     * 获取游戏礼包列表
     */
    @GET("games/{game_id}/libao?is_all_type=true")
    Single<ArrayList<LibaoEntity>> getGameLibaoList(@Path("game_id") String gameId);

    @POST("pay/wechat/goods/{goodId}/user/{userId}")
    Single<BaseEntity<WechatPayEntity>> preOrderWithWechat(@Path("goodId") String goodId, @Path("userId") String userId, @Query("type") String type);

    @POST("pay/alipay/goods/{goodId}/user/{userId}")
    Single<BaseEntity<AliPayEntity>> preOrderWithAli(@Path("goodId") String goodId, @Path("userId") String userId, @Query("type") String type);

    @GET("pay/alipay/order/{orderNo}/user/{userId}")
    Single<BaseEntity<Any>> getAliPayResult(@Path("orderNo") String orderNo, @Path("userId") String userId, @Query("type") String type);

    @GET("pay/wechat/order/{orderNo}/user/{userId}")
    Single<BaseEntity<Any>> getWechatPayResult(@Path("orderNo") String orderNo, @Path("userId") String userId, @Query("type") String type);

    @POST("vip/user/{userId}/game")
    Single<BaseEntity<Any>> recordAcctGameInfo(@Path("userId") String userId, @Query("type") String type, @Body RequestBody body);

    @POST("vip/user/{userId}/recharge_trial")
    Single<BaseEntity<TrialEntity>> rechargeTrial(@Path("userId") String userId, @Query("type") String type);

    /**
     * 上传意见反馈(奇游加速器启动失败)
     */
    @Headers({"Content-Type: application/json", "Accept: application/json"})
    @POST("suggestions")
    Single<ResponseBody> uploadAcceleratorErrorLog(@Body RequestBody toRequestBody);

    /**
     * 上传设备已安装的游戏
     */
    @POST("/devices/{device_id}/installed_games")
    Single<ResponseBody> postInstalledPackages(@Path("device_id") String deviceId, @Body RequestBody body);

}