// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/ApiResponse.java
// public class ApiResponse {
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/GalleryResponse.java
// public class GalleryResponse {
// 
//     @Expose public List<Gallery> galleries;
// 
//     public class Gallery {
// 
//         @Expose public String id;
//         @Expose public String name;
//     }
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotoGalleryRequest.java
// public class PhotoGalleryRequest {
// 
//     @Expose private Add add;
//     @Expose private Remove remove;
// 
//     public static PhotoGalleryRequest add(String photoId) {
//         PhotoGalleryRequest photoGalleryRequest = new PhotoGalleryRequest();
//         photoGalleryRequest.add = new Add(photoId);
//         return photoGalleryRequest;
//     }
// 
//     public static PhotoGalleryRequest remove(String photoId) {
//         PhotoGalleryRequest photoGalleryRequest = new PhotoGalleryRequest();
//         photoGalleryRequest.remove = new Remove(photoId);
//         return photoGalleryRequest;
//     }
// 
//     private static class Add {
// 
//         @Expose private List<String> photos;
// 
//         private Add(String photoId) {
//             photos = Collections.singletonList(photoId);
//         }
//     }
// 
//     private static class Remove {
// 
//         @Expose private List<String> photos;
// 
//         private Remove(String photoId) {
//             photos = Collections.singletonList(photoId);
//         }
//     }
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotoResponse.java
// public class PhotoResponse {
// 
//     @Expose public Photo photo;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotosResponse.java
// public class PhotosResponse {
// 
//     @Expose public String feature;
//     @Expose @SerializedName("current_page") public int currentPage;
//     @Expose @SerializedName("total_pages") public int totalPages;
//     @Expose public Photo[] photos;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/SearchResult.java
// public class SearchResult {
// 
//     @Expose public List<Photo> photos;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/UsersResponse.java
// public class UsersResponse {
// 
//     @Expose public User user;
// }


import com.lukekorth.photo_paper.models.ApiResponse;
import com.lukekorth.photo_paper.models.GalleryResponse;
import com.lukekorth.photo_paper.models.PhotoGalleryRequest;
import com.lukekorth.photo_paper.models.PhotoResponse;
import com.lukekorth.photo_paper.models.PhotosResponse;
import com.lukekorth.photo_paper.models.SearchResult;
import com.lukekorth.photo_paper.models.UsersResponse;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
package com.lukekorth.photo_paper.api;



public interface FiveHundredPxClient {

    @GET("users")
    Call<UsersResponse> users();

    @GET("photos/{id}")
    Call<PhotoResponse> photo(@Path("id") String id);

    @GET("photos/search?image_size=2&rpp=100")
    Call<SearchResult> search(@Query("term") String term);

    @GET("photos/search?image_size=2048&rpp100")
    Call<PhotosResponse> getPhotosFromSearch(@Query("term") String term, @Query("categories") String categories, @Query("page") int page);

    @GET("photos?image_size=2048&rpp=100")
    Call<PhotosResponse> getPhotos(@Query("feature") String feature, @Query("categories") String categories, @Query("page") int page);

    @GET("users/{user_id}/galleries/{gallery_id}/items?image_size=2048&rpp=100")
    Call<PhotosResponse> getFavorites(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Query("only") String categories, @Query("page") int page);

    @POST("photos/{id}/vote?vote=1")
    Call<PhotoResponse> like(@Path("id") String id);

    @DELETE("photos/{id}/vote")
    Call<PhotoResponse> unlike(@Path("id") String id);

    @PUT("users/{user_id}/galleries/{gallery_id}/items")
    Call<ApiResponse> favorite(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Body PhotoGalleryRequest request);

    @PUT("users/{user_id}/galleries/{gallery_id}/items")
    Call<ApiResponse> unfavorite(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Body PhotoGalleryRequest request);

// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/ApiResponse.java
// public class ApiResponse {
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/GalleryResponse.java
// public class GalleryResponse {
// 
//     @Expose public List<Gallery> galleries;
// 
//     public class Gallery {
// 
//         @Expose public String id;
//         @Expose public String name;
//     }
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotoGalleryRequest.java
// public class PhotoGalleryRequest {
// 
//     @Expose private Add add;
//     @Expose private Remove remove;
// 
//     public static PhotoGalleryRequest add(String photoId) {
//         PhotoGalleryRequest photoGalleryRequest = new PhotoGalleryRequest();
//         photoGalleryRequest.add = new Add(photoId);
//         return photoGalleryRequest;
//     }
// 
//     public static PhotoGalleryRequest remove(String photoId) {
//         PhotoGalleryRequest photoGalleryRequest = new PhotoGalleryRequest();
//         photoGalleryRequest.remove = new Remove(photoId);
//         return photoGalleryRequest;
//     }
// 
//     private static class Add {
// 
//         @Expose private List<String> photos;
// 
//         private Add(String photoId) {
//             photos = Collections.singletonList(photoId);
//         }
//     }
// 
//     private static class Remove {
// 
//         @Expose private List<String> photos;
// 
//         private Remove(String photoId) {
//             photos = Collections.singletonList(photoId);
//         }
//     }
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotoResponse.java
// public class PhotoResponse {
// 
//     @Expose public Photo photo;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/PhotosResponse.java
// public class PhotosResponse {
// 
//     @Expose public String feature;
//     @Expose @SerializedName("current_page") public int currentPage;
//     @Expose @SerializedName("total_pages") public int totalPages;
//     @Expose public Photo[] photos;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/SearchResult.java
// public class SearchResult {
// 
//     @Expose public List<Photo> photos;
// }
// 
// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/models/UsersResponse.java
// public class UsersResponse {
// 
//     @Expose public User user;
// }


// Path: PhotoPaper/src/main/java/com/lukekorth/photo_paper/api/FiveHundredPxClient.java
import com.lukekorth.photo_paper.models.ApiResponse;
import com.lukekorth.photo_paper.models.GalleryResponse;
import com.lukekorth.photo_paper.models.PhotoGalleryRequest;
import com.lukekorth.photo_paper.models.PhotoResponse;
import com.lukekorth.photo_paper.models.PhotosResponse;
import com.lukekorth.photo_paper.models.SearchResult;
import com.lukekorth.photo_paper.models.UsersResponse;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;

package com.lukekorth.photo_paper.api;



public interface FiveHundredPxClient {

    @GET("users")
    Call<UsersResponse> users();

    @GET("photos/{id}")
    Call<PhotoResponse> photo(@Path("id") String id);

    @GET("photos/search?image_size=2&rpp=100")
    Call<SearchResult> search(@Query("term") String term);

    @GET("photos/search?image_size=2048&rpp100")
    Call<PhotosResponse> getPhotosFromSearch(@Query("term") String term, @Query("categories") String categories, @Query("page") int page);

    @GET("photos?image_size=2048&rpp=100")
    Call<PhotosResponse> getPhotos(@Query("feature") String feature, @Query("categories") String categories, @Query("page") int page);

    @GET("users/{user_id}/galleries/{gallery_id}/items?image_size=2048&rpp=100")
    Call<PhotosResponse> getFavorites(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Query("only") String categories, @Query("page") int page);

    @POST("photos/{id}/vote?vote=1")
    Call<PhotoResponse> like(@Path("id") String id);

    @DELETE("photos/{id}/vote")
    Call<PhotoResponse> unlike(@Path("id") String id);

    @PUT("users/{user_id}/galleries/{gallery_id}/items")
    Call<ApiResponse> favorite(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Body PhotoGalleryRequest request);

    @PUT("users/{user_id}/galleries/{gallery_id}/items")
    Call<ApiResponse> unfavorite(@Path("user_id") int userId, @Path("gallery_id") String galleryId, @Body PhotoGalleryRequest request);

    @GET("users/{id}/galleries?privacy=both&rpp=100")