package com.zxhl.cms.net.api;

import com.zxhl.cms.ad.upload.model.NewsEntity;
import com.zxhl.cms.ad.upload.model.Response;
import com.zxhl.cms.ad.upload.model.WeatherEntity;
import com.zxhl.cms.common.NetConfig;
import com.zxhl.cms.net.model.news.ActivityEntity;
import com.zxhl.cms.net.model.news.DateCoins;
import com.zxhl.cms.net.model.news.DetailEntity;
import com.zxhl.cms.net.model.news.HotSearchEntity;
import com.zxhl.cms.net.model.news.NewsTipsEntity;
import com.zxhl.cms.net.model.news.RedPacketEntity;
import com.zxhl.cms.net.model.news.TabEntity;
import com.zxhl.cms.net.model.news.TabListEntity;
import com.zxhl.cms.net.model.other.ExitData;
import com.zxhl.cms.net.model.task.TaskEntity;
import com.zxhl.cms.net.model.uc.CoinEntity;
import com.zxhl.cms.net.model.uc.CollectEntity;
import com.zxhl.cms.net.model.video.VideoEntity;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * Created by gaoleichao on 2018/5/2.
 */

public interface INewsInfoApi {
    /**
     * 获取首页Tab列表
     *
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_TABLIST)
    Observable<Response<List<TabEntity>>> getTabList();

    /**
     * 获取用户保存的tab列表
     *
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_USERTABLIST)
    Observable<Response<TabListEntity>> getUserTabList();

    /**
     * 保存tab列表
     *
     * @return
     */
    @POST(NetConfig.News.URL_NEWS_STOREINFOTAB)
    Observable<Response<Object>> storeInfoTab(@Query("tabs") String tabs);


    /**
     * 获取新闻详情页
     *
     * @param md5
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_INFODETAIL)
    Observable<Response<DetailEntity>> getInfoDetail(@Query("md5") String md5, @Query("slot_id") String slot_id);


    /**
     * 新闻阅读奖励
     *
     * @param md5
     * @param type
     * @return
     */
    @POST(NetConfig.News.URL_NEWS_STOREINFOCOIN)
    Observable<Response<CoinEntity>> storeCoin(@Query("md5") String md5, @Query("type") long type, @Query("subnum") int num);

    /**
     * 获取热搜词
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_HOTSEARCH)
    Observable<Response<HotSearchEntity>> getTopKey();

    /**
     * 获取资讯页面提示
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_TIPS)
    Observable<Response<NewsTipsEntity>> getNewsTips();

    /**
     * 获取资讯页面提示
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.Other.URL_ACTIVITY)
    Observable<Response<ActivityEntity>> getActivity();

    /**
     * 获取时段奖励
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.Other.URL_STATUS)
    Observable<Response<DateCoins>> getStatus();

    /**
     * 获取时段奖励
     *
     * @param
     * @param
     * @return
     */
    @POST(NetConfig.Other.URL_AWARD)
    Observable<Response<CoinEntity>> award();

    /**
     * 获取浮动icon
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_FLOAT_ICON)
    Observable<Response<List<TaskEntity>>> getFloatIcon(@Query("identify") String identify);

    /**
     * 获取资讯页剩余红包数
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_REDPACKET)
    Observable<Response<RedPacketEntity>> getRedPacketNum();

    /**
     * 获取退出对话框显示内容
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_GET_EXIT_DATA)
    Observable<Response<ExitData>> getExitData();

    /**
     * 查询新闻是否收藏
     *
     * @param
     * @param
     * @return
     */
    @GET(NetConfig.News.URL_NEWS_QUERY_COLLECT)
    Observable<Response<CollectEntity>> getCollectStatus(@Query("md5") String md5);

    /**
     * 收藏资讯
     *
     * @param
     * @param
     * @return
     */
    @POST(NetConfig.News.URL_NEWS_COLLECT)
    Observable<Response> collect(@Query("md5") String md5, @Query("title") String title, @Query("url") String url, @Query("tabid") String tabid, @Query("images") String images);

    /**
     * 取消资讯
     *
     * @param
     * @param
     * @return
     */
    @POST(NetConfig.News.URL_NEWS_UN_COLLECT)
    Observable<Response> cancelCollect(@Query("md5") String mdt);

    /**
     * 获取视频详情
     *
     * @param
     * @param
     * @return
     */
    @GET
    Observable<Response<VideoEntity>> getVideoInfo(@Url String url, @Query("key") String key, @Query("type") String type, @Query("channel") String channel);

    /**
     * 获取资讯和新闻列表
     *
     * @param
     * @param
     * @return
     */
    @GET
    Observable<Response<List<NewsEntity>>> getNewsData(@Url String url, @Query("channel") String channel, @Query("page") String page, @Query("starKey") String starKey, @Query("slotId") String slotId,@Query("location") String location);


    /**
     * 根据城市名称查询对应天气
     *
     * @param
     * @param
     * @return
     */
    @GET
    Observable<Response<WeatherEntity>> getWeather(@Url String url, @Query("location") String city);
}
