package com.novelbook.android.netsubscribe;

import android.util.Log;

import com.novelbook.android.netutils.HttpMethods;
import com.novelbook.android.netutils.OnSuccessAndFaultListener;
import com.novelbook.android.netutils.OnSuccessAndFaultSub;

import java.util.HashMap;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.observers.DisposableObserver;
import okhttp3.ResponseBody;
import retrofit2.http.Path;

public class BookSubscribe {
    public final static String TAG = BookSubscribe.class.getSimpleName();
    public static void getData(int pageNumber, int count, DisposableObserver<ResponseBody> subscriber) {
        Map<String,Integer> map = new HashMap<>();
        map.put("start",pageNumber);
        map.put("count",count);
        Observable<ResponseBody> observable =  HttpMethods.getInstance().getHttpApi().getDataForMap(map);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getMastDomain(DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/g").getHttpApi().getMasterDomain();
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getNovel(int novelId,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/n/%s",novelId)).getHttpApi().getNovel(novelId);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getNovelSites(int novelId,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/n/%s/mulu-urls",novelId)).getHttpApi().getNovelSites(novelId);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getSiteRule(String domain,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/s/%s.json",domain)).getHttpApi().getNovelRule(domain);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

    public static void getFirstPage(int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/page/index" )).getHttpApi().getFirstPage(sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getCates(int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/noveltype").getHttpApi().getCates(sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getCateNovelList(String cate,int pageno,int sex,int progress,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/search/nt/%s/%s",cate,pageno ) ).getHttpApi().getCateNovels(cate,pageno,sex,progress);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

    public static void getNovelPaihang(String fn,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/rank").getHttpApi().getNovelPaihang(fn,pageNo,sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

    public static void getNovelsRelated(int novelId,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/n/%s/about",novelId ) ).getHttpApi().getNovelsRelated(novelId);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

    public static void getNovelsSameAuthor(int novelId,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/n/%s/author",novelId ) ).getHttpApi().getNovelsSameAuthor(novelId);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

/*    public static void getSiteRanks( int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/siteranks").getHttpApi().getSiteRanks(sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getSiteRankDetail( String fn,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/siterank").getHttpApi().getSiteRankDetail(fn,pageNo,sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }*/

    public static void getSearchNovelList( String keyWord,int pageNo,int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance(String.format("/api/search/%s/%s",keyWord ,pageNo)).getHttpApi().getSeachNolvelist(keyWord,pageNo,sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getSearchTitles(int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/topdata").getHttpApi().getSearchTitles(sex);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getHotKeyWords(DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/page/hot-keywords").getHttpApi().getSearchHotKeys();
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getNovelsByIds(String ids,DisposableObserver<ResponseBody> subscriber){

        Observable<ResponseBody> observable =  HttpMethods.getInstance("/api/novels").getHttpApi().getNovelsByIds(ids);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getVersion(DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("download/version.xml").getHttpApi().getVersion();
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getPaihangBangCateList(int sex,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("page/category").getHttpApi().getPaihangBangCateList(sex,"rank");
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getPaihangBangByCate(int sex,int cid ,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("page/siteranks").getHttpApi().getPaihangBangByCate(sex,cid);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
    public static void getPaihangBangList(int sex,int pageNo,int cid ,DisposableObserver<ResponseBody> subscriber){
        Observable<ResponseBody> observable =  HttpMethods.getInstance("page/siterank").getHttpApi().getPaihangBangList(sex,cid,pageNo);
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }

    public static void reportMsg(String actionType,  String msg   ){
        Map<String,String> map = new HashMap<>();
        map.put("msg",msg );

        Observable<ResponseBody> observable =  HttpMethods.getInstance("r/").getHttpApi().reportMsg( actionType, map);
        Log.d( TAG,String.format("report actionType %s, msg %s",actionType,msg));
        DisposableObserver<ResponseBody> subscriber =  new OnSuccessAndFaultSub(new OnSuccessAndFaultListener() {

            @Override
            public void onSuccess(String result) {
                Log.d( TAG,String.format("report result %s",result));
            }

            @Override
            public void onFault(String errorMsg) {
                Log.e( TAG,String.format("report error %s",errorMsg));
            }
        });
        HttpMethods.getInstance().toSubscribe(observable, subscriber);
    }
}