package com.yidianling.course.net;

import com.ydl.ydlcommon.data.http.BaseAPIResponse;
import com.ydl.ydlcommon.data.http.BaseResponse;
import com.yidianling.course.bean.CouponHintResponseBean;
import com.yidianling.course.bean.Course;
import com.yidianling.course.bean.CourseAddOrderBean;
import com.yidianling.course.bean.CourseCouponBean;
import com.yidianling.course.bean.CourseListDataBean;
import com.yidianling.course.bean.CourseMediaDetailBean;
import com.yidianling.course.bean.CoursePlayBean;
import com.yidianling.course.bean.PostersShareBean;
import com.yidianling.course.course_special_list.bean.CourseSpecialListBean;
import com.yidianling.course.model.CourseCategoryBean;
import com.yidianling.course.model.TopicCourseBean;

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

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

import static com.ydl.ydlcommon.base.config.AppConfigKt.YDL_DOMAIN;
import static com.ydl.ydlcommon.base.config.AppConfigKt.YDL_DOMAIN_JAVA;
import static com.ydl.ydlcommon.base.config.AppConfigKt.YDL_DOMAIN_JAVA_URL;

/**
 * Created by Jim on 2018/2/26 0026.
 */

public interface NetApiStore {


    //获取课程列表
    @retrofit2.http.Headers("Content-Type:application/json")
    @GET()
    Observable<BaseAPIResponse<CourseListDataBean>> getCourseList(@Url String url);

    //获取课程列表
    @FormUrlEncoded
    @POST("course/list")
    Observable<BaseResponse<List<Course>>> getPhpCourseList(@FieldMap Map<String, String> params);

    //课程课后笔记列表
    @FormUrlEncoded
    @POST("course/comments")
    Observable<BaseResponse<List<CoursePlayBean.Comments>>> courseReplyList(@FieldMap Map<String, String> params);

    //课程提交回复
    @FormUrlEncoded
    @POST("auth/course/comments/add")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseResponse<Object>> commitCourseReply(@FieldMap Map<String, String> params);

    //课程播放页--点赞
    @FormUrlEncoded
    @POST("course/zan")
    Observable<BaseResponse<Object>> coursePlayZan(@FieldMap Map<String, String> params);

    //参加课程
    @FormUrlEncoded
    @POST("course/add-order")
    Observable<BaseResponse<CourseAddOrderBean>> addCourseOrder(@FieldMap Map<String, String> params);

    //获取课程海报分享数据
    @GET("auth/course/posters/share")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseResponse<PostersShareBean>> getPosterData(@Query("id") String courseId);


    //首页分类
    @FormUrlEncoded
    @POST("course/cats")
    Observable<BaseResponse<List<CourseCategoryBean>>> getCourseCats(@FieldMap Map<String, String> params);

    //课程筛选分类
    @GET("auth/course/search/newsample")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseAPIResponse<CourseCategoryBean>> getCourseListCategory();


    //课程专题列表接口
    @GET("auth/course/new/listCoursesBySpecialId")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseAPIResponse<TopicCourseBean>> getCourseSpecial(@Query("specialId") String uid);


    /**
     * 获取可以领取的优惠券
     *
     * @param uid         uid
     * @param services    适用服务 1预约咨询 2电话倾诉 3课程(用户课程 专家课程) 5测评
     * @param receiveType 领取条件方式 1前台领取 2链接领取
     * @param applyEnds   适用终端 1PC官网 2wap站点 3用户app 4好杮app 5专家app
     * @return
     */
    @GET("marketing/coupon/new/available")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
    Observable<BaseResponse<List<CourseCouponBean>>> getCourseCoupons(@Query("uid") String uid,
                                                                      @Query("services") String services,
                                                                      @Query("receiveType") String receiveType,
                                                                      @Query("applyEnds") String applyEnds);

    //领取优惠券
    @POST("marketing/coupon/new/receives")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA_URL)
    Observable<BaseResponse<List<String>>> receiveCoupon(@Body RequestBody body);


    @GET("auth/coupon/courseCoupon/warn")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseAPIResponse<CouponHintResponseBean>> getCouponHint();


    //倾诉红包接口
    @retrofit2.http.Headers("Content-Type:application/json")
    @GET
    Observable<BaseAPIResponse<String>> getCouponMax(@Url String url);

    //获取课程播放页 java 接口
    @GET("auth/course/get/all/audio-video")
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    Observable<BaseResponse<CourseMediaDetailBean>> getCoursePlayData(@Query("courseId") String courseId);


    //课程专题列表
    @Headers(YDL_DOMAIN + YDL_DOMAIN_JAVA)
    @GET("auth/course/listCoursesBySpecialId")
    Observable<BaseAPIResponse<CourseSpecialListBean>> courseSpecialList(@QueryMap Map<String, String> params);
}