// Path: app/src/main/java/com/knight/arch/data/AllPersonlInfos.java
// public class AllPersonlInfos {
//     public List<PersonInfo> data;
// 
//     public List<PersonInfo> getData() {
//         return data;
//     }
// 
//     public void setData(List<PersonInfo> data) {
//         this.data = data;
//     }
// }
// 
// Path: app/src/main/java/com/knight/arch/data/Pagination.java
// public class Pagination<T extends Parcelable> {
// 
//     @Expose
//     private List<T> data;
// 
// 
//     public List<T> getData() {
//         return data;
//     }
// 
//     public void setData(List<T> data) {
//         this.data = data;
//     }
// }
// 
// Path: app/src/main/java/com/knight/arch/model/PersonInfo.java
// public class PersonInfo implements Parcelable {
// 
//     public static final Creator<PersonInfo> CREATOR = new Creator<PersonInfo>() {
//         @Override
//         public PersonInfo createFromParcel(Parcel in) {
//             return new PersonInfo(in);
//         }
// 
//         @Override
//         public PersonInfo[] newArray(int size) {
//             return new PersonInfo[size];
//         }
//     };
//     @SerializedName("rank")
//     private String Rank;
//     @SerializedName("gravatar")
//     private String Gravatar;
//     private String username;
//     private String name;
//     private String location;
//     private String language;
//     private String repos;
//     private String followers;
//     private String created;
// 
//     protected PersonInfo(Parcel in) {
//         Rank = in.readString();
//         Gravatar = in.readString();
//         username = in.readString();
//         name = in.readString();
//         location = in.readString();
//         language = in.readString();
//         repos = in.readString();
//         followers = in.readString();
//         created = in.readString();
//     }
// 
//     public String getGravatar() {
//         return Gravatar;
//     }
// 
//     public void setGravatar(String gravatar) {
//         Gravatar = gravatar;
//     }
// 
//     public String getRank() {
//         return Rank;
//     }
// 
//     public void setRank(String rank) {
//         Rank = rank;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getLocation() {
//         return location;
//     }
// 
//     public void setLocation(String location) {
//         this.location = location;
//     }
// 
//     public String getLanguage() {
//         return language;
//     }
// 
//     public void setLanguage(String language) {
//         this.language = language;
//     }
// 
//     public String getRepos() {
//         return repos;
//     }
// 
//     public void setRepos(String repos) {
//         this.repos = repos;
//     }
// 
//     public String getFollowers() {
//         return followers;
//     }
// 
//     public void setFollowers(String followers) {
//         this.followers = followers;
//     }
// 
//     public String getCreated() {
//         return created;
//     }
// 
//     public void setCreated(String created) {
//         this.created = created;
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(Rank);
//         dest.writeString(Gravatar);
//         dest.writeString(username);
//         dest.writeString(name);
//         dest.writeString(location);
//         dest.writeString(language);
//         dest.writeString(repos);
//         dest.writeString(followers);
//         dest.writeString(created);
//     }
// }


import com.facebook.stetho.okhttp.StethoInterceptor;
import com.knight.arch.data.AllPersonlInfos;
import com.knight.arch.data.Pagination;
import com.knight.arch.model.PersonInfo;
import com.squareup.okhttp.OkHttpClient;
import java.util.List;
import java.util.concurrent.TimeUnit;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.client.OkClient;
import retrofit.http.GET;
import retrofit.http.Query;
import rx.Observable;
package com.knight.arch.api;





/**
 * @author andyiac
 * @date 15-9-16
 * @web http://blog.andyiac.com
 * @github https://github.com/andyiac
 */
public class ApiClient {
    static final int CONNECT_TIMEOUT_MILLIS = 15 * 1000; // 15s
    static final int READ_TIMEOUT_MILLIS = 20 * 1000; // 20s
    private static final String BASE_URL = "http://mock-api.com/TyTabSFqXNyqMpNw.mock";
    private static TestDemoApiInterface testDemoApiInterface;

    /**
     * 用于Stethoscope调试的ttpClient
     */
    public static OkClient getOkClient() {
        OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        client.networkInterceptors().add(new StethoInterceptor());
        return new OkClient(client);
    }

    public static TestDemoApiInterface getTestDemoApiClient() {
        if (testDemoApiInterface == null) {
            RestAdapter restAdapter = new RestAdapter.Builder()
                    .setClient(getOkClient())
                    .setEndpoint(BASE_URL)
                    .build();

            testDemoApiInterface = restAdapter.create(TestDemoApiInterface.class);
        }

        return testDemoApiInterface;
    }

    public interface TestDemoApiInterface {
        @GET("/getdata")
        void getStreams(@Query("limit") int limit, @Query("offset") int offset, Callback<List<AllPersonlInfos>> callback);

        @GET("/getdata")
        void getData2(Callback<AllPersonlInfos> callback);

        @GET("/getdata")
// Path: app/src/main/java/com/knight/arch/data/AllPersonlInfos.java
// public class AllPersonlInfos {
//     public List<PersonInfo> data;
// 
//     public List<PersonInfo> getData() {
//         return data;
//     }
// 
//     public void setData(List<PersonInfo> data) {
//         this.data = data;
//     }
// }
// 
// Path: app/src/main/java/com/knight/arch/data/Pagination.java
// public class Pagination<T extends Parcelable> {
// 
//     @Expose
//     private List<T> data;
// 
// 
//     public List<T> getData() {
//         return data;
//     }
// 
//     public void setData(List<T> data) {
//         this.data = data;
//     }
// }
// 
// Path: app/src/main/java/com/knight/arch/model/PersonInfo.java
// public class PersonInfo implements Parcelable {
// 
//     public static final Creator<PersonInfo> CREATOR = new Creator<PersonInfo>() {
//         @Override
//         public PersonInfo createFromParcel(Parcel in) {
//             return new PersonInfo(in);
//         }
// 
//         @Override
//         public PersonInfo[] newArray(int size) {
//             return new PersonInfo[size];
//         }
//     };
//     @SerializedName("rank")
//     private String Rank;
//     @SerializedName("gravatar")
//     private String Gravatar;
//     private String username;
//     private String name;
//     private String location;
//     private String language;
//     private String repos;
//     private String followers;
//     private String created;
// 
//     protected PersonInfo(Parcel in) {
//         Rank = in.readString();
//         Gravatar = in.readString();
//         username = in.readString();
//         name = in.readString();
//         location = in.readString();
//         language = in.readString();
//         repos = in.readString();
//         followers = in.readString();
//         created = in.readString();
//     }
// 
//     public String getGravatar() {
//         return Gravatar;
//     }
// 
//     public void setGravatar(String gravatar) {
//         Gravatar = gravatar;
//     }
// 
//     public String getRank() {
//         return Rank;
//     }
// 
//     public void setRank(String rank) {
//         Rank = rank;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public String getLocation() {
//         return location;
//     }
// 
//     public void setLocation(String location) {
//         this.location = location;
//     }
// 
//     public String getLanguage() {
//         return language;
//     }
// 
//     public void setLanguage(String language) {
//         this.language = language;
//     }
// 
//     public String getRepos() {
//         return repos;
//     }
// 
//     public void setRepos(String repos) {
//         this.repos = repos;
//     }
// 
//     public String getFollowers() {
//         return followers;
//     }
// 
//     public void setFollowers(String followers) {
//         this.followers = followers;
//     }
// 
//     public String getCreated() {
//         return created;
//     }
// 
//     public void setCreated(String created) {
//         this.created = created;
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(Rank);
//         dest.writeString(Gravatar);
//         dest.writeString(username);
//         dest.writeString(name);
//         dest.writeString(location);
//         dest.writeString(language);
//         dest.writeString(repos);
//         dest.writeString(followers);
//         dest.writeString(created);
//     }
// }


// Path: app/src/main/java/com/knight/arch/api/ApiClient.java
import com.facebook.stetho.okhttp.StethoInterceptor;
import com.knight.arch.data.AllPersonlInfos;
import com.knight.arch.data.Pagination;
import com.knight.arch.model.PersonInfo;
import com.squareup.okhttp.OkHttpClient;
import java.util.List;
import java.util.concurrent.TimeUnit;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.client.OkClient;
import retrofit.http.GET;
import retrofit.http.Query;
import rx.Observable;

package com.knight.arch.api;





/**
 * @author andyiac
 * @date 15-9-16
 * @web http://blog.andyiac.com
 * @github https://github.com/andyiac
 */
public class ApiClient {
    static final int CONNECT_TIMEOUT_MILLIS = 15 * 1000; // 15s
    static final int READ_TIMEOUT_MILLIS = 20 * 1000; // 20s
    private static final String BASE_URL = "http://mock-api.com/TyTabSFqXNyqMpNw.mock";
    private static TestDemoApiInterface testDemoApiInterface;

    /**
     * 用于Stethoscope调试的ttpClient
     */
    public static OkClient getOkClient() {
        OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        client.setReadTimeout(READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
        client.networkInterceptors().add(new StethoInterceptor());
        return new OkClient(client);
    }

    public static TestDemoApiInterface getTestDemoApiClient() {
        if (testDemoApiInterface == null) {
            RestAdapter restAdapter = new RestAdapter.Builder()
                    .setClient(getOkClient())
                    .setEndpoint(BASE_URL)
                    .build();

            testDemoApiInterface = restAdapter.create(TestDemoApiInterface.class);
        }

        return testDemoApiInterface;
    }

    public interface TestDemoApiInterface {
        @GET("/getdata")
        void getStreams(@Query("limit") int limit, @Query("offset") int offset, Callback<List<AllPersonlInfos>> callback);

        @GET("/getdata")
        void getData2(Callback<AllPersonlInfos> callback);

        @GET("/getdata")
        Observable<Pagination<PersonInfo>> getDataRxJava();