/**
 * NOTE: This class is auto generated by the swagger code generator program (3.0.18).
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */
package io.swagger.api.geno;

import io.swagger.model.BrAPIResponse;
import io.swagger.model.Model202AcceptedSearchResponse;
import io.swagger.model.geno.CallSetsListResponse;
import io.swagger.model.geno.CallsListResponse;
import io.swagger.model.geno.VariantSetResponse;
import io.swagger.model.geno.VariantSetsExtractRequest;
import io.swagger.model.geno.VariantSetsListResponse;
import io.swagger.model.geno.VariantSetsSearchRequest;
import io.swagger.model.geno.VariantsListResponse;
import io.swagger.annotations.*;

import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import jakarta.validation.Valid;

@javax.annotation.processing.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-03-20T16:32:53.794Z[GMT]")
@Api(value = "variantsets", description = "the variantsets API")
public interface VariantSetsApi {

	@ApiOperation(value = "Create new `VariantSet` based on search results", nickname = "variantsetsExtractPost", notes = "Will perform a search for `Calls` which match the search criteria in `variantSetsExtractRequest`. The results of the search will be used to create a new `VariantSet` on the server. The new `VariantSet` will be returned.", response = VariantSetResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantSetResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class),
			@ApiResponse(code = 404, message = "Not Found", response = String.class) })
	@RequestMapping(value = "/variantsets/extract", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<VariantSetResponse> variantsetsExtractPost(
			@ApiParam(value = "Study Search request") @Valid @RequestBody VariantSetsExtractRequest body,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a filtered list of `VariantSets`.", nickname = "variantsetsGet", notes = "Will return a filtered list of `VariantSet`.", response = VariantSetsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantSetsListResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/variantsets", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<VariantSetsListResponse> variantsetsGet(
			@ApiParam(value = "variantSetDbId") @Valid @RequestParam(value = "variantSetDbId", required = false) String variantSetDbId,
			@ApiParam(value = "variantDbId") @Valid @RequestParam(value = "variantDbId", required = false) String variantDbId,
			@ApiParam(value = "callSetDbId") @Valid @RequestParam(value = "callSetDbId", required = false) String callSetDbId,
			@ApiParam(value = "studyDbId") @Valid @RequestParam(value = "studyDbId", required = false) String studyDbId,
			@ApiParam(value = "studyName") @Valid @RequestParam(value = "studyName", required = false) String studyName,
			@ApiParam(value = "referenceSetDbId") @Valid @RequestParam(value = "referenceSetDbId", required = false) String referenceSetDbId,
			@ApiParam(value = "commonCropName") @Valid @RequestParam(value = "commonCropName", required = false) String commonCropName,
			@ApiParam(value = "programDbId") @Valid @RequestParam(value = "programDbId", required = false) String programDbId,
			@ApiParam(value = "externalReferenceId") @Valid @RequestParam(value = "externalReferenceId", required = false) String externalReferenceId,
			@ApiParam(value = "externalReferenceSource") @Valid @RequestParam(value = "externalReferenceSource", required = false) String externalReferenceSource,
			@ApiParam(value = "page") @Valid @RequestParam(value = "page", required = false) Integer page,
			@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a list of `Calls` associated with a `VariantSet`.", nickname = "variantsetsVariantSetDbIdCallsGet", notes = "Gets a list of `Calls` associated with a `VariantSet`.  ** THIS ENDPOINT USES TOKEN BASED PAGING **", response = CallsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = CallsListResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/variantsets/{variantSetDbId}/calls", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<CallsListResponse> variantsetsVariantSetDbIdCallsGet(
			@ApiParam(value = "The ID of the `VariantSet` to be retrieved.", required = true) @PathVariable("variantSetDbId") String variantSetDbId,
			@ApiParam(value = "expandHomozygotes") @Valid @RequestParam(value = "expandHomozygotes", required = false) Boolean expandHomozygotes,
			@ApiParam(value = "unknownString") @Valid @RequestParam(value = "unknownString", required = false) String unknownString,
			@ApiParam(value = "sepPhased") @Valid @RequestParam(value = "sepPhased", required = false) String sepPhased,
			@ApiParam(value = "sepUnphased") @Valid @RequestParam(value = "sepUnphased", required = false) String sepUnphased,
			@ApiParam(value = "pageToken") @Valid @RequestParam(value = "pageToken", required = false) String pageToken,
			@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a list of `CallSets` associated with a `VariantSet`.", nickname = "variantsetsVariantSetDbIdCallsetsGet", notes = "Gets a list of `CallSets` associated with a `VariantSet`.", response = CallSetsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = CallSetsListResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/variantsets/{variantSetDbId}/callsets", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<CallSetsListResponse> variantsetsVariantSetDbIdCallsetsGet(
			@ApiParam(value = "The ID of the `VariantSet` to be retrieved.", required = true) @PathVariable("variantSetDbId") String variantSetDbId,
			@ApiParam(value = "callSetDbId") @Valid @RequestParam(value = "callSetDbId", required = false) String callSetDbId,
			@ApiParam(value = "callSetName") @Valid @RequestParam(value = "callSetName", required = false) String callSetName,
			@ApiParam(value = "page") @Valid @RequestParam(value = "page", required = false) Integer page,
			@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a `VariantSet` by ID.", nickname = "variantsetsVariantSetDbIdGet", notes = "This call will return a JSON version of a `VariantSet`.", response = VariantSetResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantSetResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class),
			@ApiResponse(code = 404, message = "Not Found", response = String.class) })
	@RequestMapping(value = "/variantsets/{variantSetDbId}", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<VariantSetResponse> variantsetsVariantSetDbIdGet(
			@ApiParam(value = "The ID of the `Variant` to be retrieved.", required = true) @PathVariable("variantSetDbId") String variantSetDbId,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a `Variants` for a given `VariantSet`.", nickname = "variantsetsVariantSetDbIdVariantsGet", notes = "This call will return an array of `Variants`.  ** THIS ENDPOINT USES TOKEN BASED PAGING **", response = VariantsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantsListResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/variantsets/{variantSetDbId}/variants", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<VariantsListResponse> variantsetsVariantSetDbIdVariantsGet(
			@ApiParam(value = "The ID of the `VariantSet` to be retrieved.", required = true) @PathVariable("variantSetDbId") String variantSetDbId,
			@ApiParam(value = "variantDbId") @Valid @RequestParam(value = "variantDbId", required = false) String variantDbId,
			@ApiParam(value = "pageToken") @Valid @RequestParam(value = "pageToken", required = false) String pageToken,
			@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a list of `VariantSet` matching the search criteria.", nickname = "searchVariantsetsPost", notes = "Gets a list of `VariantSet` matching the search criteria.", response = VariantSetsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantSetsListResponse.class),
			@ApiResponse(code = 202, message = "Accepted", response = Model202AcceptedSearchResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/search/variantsets", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<? extends BrAPIResponse> searchVariantsetsPost(
			@ApiParam(value = "Study Search request") @Valid @RequestBody VariantSetsSearchRequest body,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Gets a list of `VariantSet` matching the search criteria.", nickname = "searchVariantsetsSearchResultsDbIdGet", notes = "Gets a list of `VariantSet` matching the search criteria.", response = VariantSetsListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Variant Sets", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = VariantSetsListResponse.class),
			@ApiResponse(code = 202, message = "Accepted", response = Model202AcceptedSearchResponse.class),
			@ApiResponse(code = 400, message = "Bad Request", response = String.class),
			@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
			@ApiResponse(code = 403, message = "Forbidden", response = String.class) })
	@RequestMapping(value = "/search/variantsets/{searchResultsDbId}", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<? extends BrAPIResponse> searchVariantsetsSearchResultsDbIdGet(
			@ApiParam(value = "Permanent unique identifier which references the search results", required = true) @PathVariable("searchResultsDbId") String searchResultsDbId,
			@ApiParam(value = "page") @Valid @RequestParam(value = "page", required = false) Integer page,
			@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

}
