package com.fastaccess.data.service;
import android.support.annotation.NonNull;
import com.fastaccess.data.dao.AssigneesRequestModel;
import com.fastaccess.data.dao.CommentRequestModel;
import com.fastaccess.data.dao.CreateIssueModel;
import com.fastaccess.data.dao.IssueRequestModel;
import com.fastaccess.data.dao.LabelModel;
import com.fastaccess.data.dao.Pageable;
import com.fastaccess.data.dao.model.Comment;
import com.fastaccess.data.dao.model.Issue;
import com.fastaccess.data.dao.model.IssueEvent;
import java.util.List;
import retrofit2.Response;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import rx.Observable;
public interface IssueService {
@GET("repos/{owner}/{repo}/issues")
Observable<Pageable<Issue>> getRepositoryIssues(@Path("owner") String owner, @Path("repo") String repo,
@Query("state") String state, @Query("sort") String sortBy,
@Query("page") int page);
@GET("search/issues") Observable<Pageable<Issue>> getIssuesWithCount(@NonNull @Query(value = "q", encoded = true) String query,
@Query("page") int page);
@GET("user/issues")
Observable<Pageable<Issue>> getUserIssues(@Query("page") int page, @Query("state") @NonNull String state);
@GET("repos/{owner}/{repo}/issues/{number}")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Issue> getIssue(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number);
@GET("repos/{owner}/{repo}/issues/{issue_number}/events?per_page=200")
Observable<Pageable<IssueEvent>> getTimeline(@Path("owner") String owner, @Path("repo") String repo,
@Path("issue_number") int issue_number);
@POST("repos/{owner}/{repo}/issues")
Observable<Issue> createIssue(@Path("owner") String owner, @Path("repo") String repo,
@Body IssueRequestModel issue);
@PATCH("repos/{owner}/{repo}/issues/{number}")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Issue> editIssue(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number,
@Body IssueRequestModel issue);
@Headers("Content-Length: 0")
@PUT("repos/{owner}/{repo}/issues/{number}/lock")
Observable<Response<Boolean>> lockIssue(@Path("owner") String owner, @Path("repo") String repo, @Path("number") int number);
@DELETE("repos/{owner}/{repo}/issues/{number}/lock")
Observable<Response<Boolean>> unlockIssue(@Path("owner") String owner, @Path("repo") String repo, @Path("number") int number);
@GET("repos/{owner}/{repo}/issues/{number}/comments?per_page=200")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Pageable<Comment>> getIssueComments(@Path("owner") String owner,
@Path("repo") String repo,
@Path("number") int number);
@GET("repos/{owner}/{repo}/issues/{number}/comments/{id}")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Comment> getIssueComment(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number, @Path("id") long id);
@POST("repos/{owner}/{repo}/issues/{number}/comments")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Comment> createIssueComment(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number, @Body CommentRequestModel body);
@PATCH("repos/{owner}/{repo}/issues/comments/{id}")
@Headers("Accept: application/vnd.github.VERSION.full+json, application/vnd.github.squirrel-girl-preview")
Observable<Comment> editIssueComment(@Path("owner") String owner, @Path("repo") String repo, @Path("id") long id,
@Body CommentRequestModel body);
@DELETE("repos/{owner}/{repo}/issues/comments/{id}")
Observable<Response<Boolean>> deleteIssueComment(@Path("owner") String owner, @Path("repo") String repo, @Path("id") long id);
@POST("repos/{owner}/{repo}/issues")
Observable<Issue> createIssue(@Path("owner") String owner, @Path("repo") String repo, @NonNull @Body CreateIssueModel body);
@PUT("repos/{owner}/{repo}/issues/{number}/labels")
Observable<Pageable<LabelModel>> putLabels(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number, @Body @NonNull List<String> labels);
@POST("repos/{owner}/{repo}/issues/{number}/assignees")
Observable<Issue> putAssignees(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number, @Body AssigneesRequestModel body);
}