package com.sheep.gamegroup.model.api;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sheep.gamegroup.model.entity.BaseMessage;

import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import rx.Observable;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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


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


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

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

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


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

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

    /**新手红包
     * @return  .
     */
    @POST("app/newbie_task/login_red_packet")
    Observable<BaseMessage>getNewRedPackage();
    /**
     * 更换手机号
     */
    @POST("app/user/switch_phone")
    Observable<BaseMessage> switchPhone(@Body JSONObject jsonObject);


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


    /*****div***/

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

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


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

    /*****div***/

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

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

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

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

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


    /****************div****************/

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * 获取邀请用户进两月礼物发放记录
     */
    @GET("app/user/invitation_top_record")
    Observable<BaseMessage> getInvitationTopRecord();
    /**
     * 获取用户未做金额
     * can_receive_awar
     */
    @GET("app/user/can_receive_award")
    Observable<BaseMessage> getCanREceiveAwar();
    /**
     * 任务审核
     * accepted_task/static_audit
     */
    @GET("app/accepted_task/static_audit")
    Observable<BaseMessage> staticAudit();
    /**
     * 唤醒业务APP列表
     */
    @GET("app/awaken/app")
    Observable<BaseMessage> awakenApp(@Query("page") int page, @Query("per_page") int per_page);
    /**
     * 唤醒业务APP列表
     */
    @GET("app/awaken/article")
    Observable<BaseMessage> awakenApparticle(@Query("page") int page, @Query("per_page") int per_page);
    /**
     * 唤醒业务打开app内容成功后回调
     */
    @POST("app/awaken/detail")
    Observable<BaseMessage> awakenDetail(@Body JSONObject jsonObject);
}
