/**
 * 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.geno.GenomeMapListResponse;
import io.swagger.model.geno.GenomeMapSingleResponse;
import io.swagger.model.geno.LinkageGroupListResponse;
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.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 = "maps", description = "the maps API")
public interface MapsApi {

	@ApiOperation(value = "Get the Genomic Maps", nickname = "mapsGet", notes = "Get list of maps", response = GenomeMapListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Genome Maps", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = GenomeMapListResponse.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 = "/maps", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<GenomeMapListResponse> mapsGet(
			@ApiParam(value = "The common name of the crop") @Valid @RequestParam(value = "commonCropName", required = false) String commonCropName,
			@ApiParam(value = "The DOI or other permanent identifier for this genomic map") @Valid @RequestParam(value = "mapPUI", required = false) String mapPUI,
			@ApiParam(value = "Full scientific binomial format name. This includes Genus, Species, and Sub-species") @Valid @RequestParam(value = "scientificName", required = false) String scientificName,
			@ApiParam(value = "Type of map", allowableValues = "physical, genomic") @Valid @RequestParam(value = "type", required = false) String type,
			@ApiParam(value = "Unique Id to filter by Program") @Valid @RequestParam(value = "programDbId", required = false) String programDbId,
			@ApiParam(value = "Unique Id to filter by Trial") @Valid @RequestParam(value = "trialDbId", required = false) String trialDbId,
			@ApiParam(value = "Unique Id to filter by Study") @Valid @RequestParam(value = "studyDbId", required = false) String studyDbId,
			@ApiParam(value = "Used to request a specific page of data to be returned.  The page indexing starts at 0 (the first page is 'page'= 0). Default is `0`.") @Valid @RequestParam(value = "page", required = false) Integer page,
			@ApiParam(value = "The size of the pages to be returned. Default is `1000`.") @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 = "Get the details of a specific Genomic Map", nickname = "mapsMapDbIdGet", notes = "Provides the number of markers on each linkageGroup and the max position on the linkageGroup", response = GenomeMapSingleResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Genome Maps", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = GenomeMapSingleResponse.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 = "/maps/{mapDbId}", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<GenomeMapSingleResponse> mapsMapDbIdGet(
			@ApiParam(value = "The internal db id of a selected map", required = true) @PathVariable("mapDbId") String mapDbId,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Get the Linkage Groups of a specific Genomic Map", nickname = "mapsMapDbIdLinkagegroupsGet", notes = "Get the Linkage Groups of a specific Genomic Map. A Linkage Group is the BrAPI generic term for a named section of a map. A Linkage Group can represent a Chromosome, Scaffold, or Linkage Group.", response = LinkageGroupListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Genome Maps", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = LinkageGroupListResponse.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 = "/maps/{mapDbId}/linkagegroups", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<LinkageGroupListResponse> mapsMapDbIdLinkagegroupsGet(
			@ApiParam(value = "The internal db id of a selected map", required = true) @PathVariable("mapDbId") String mapDbId,
			@ApiParam(value = "Used to request a specific page of data to be returned.  The page indexing starts at 0 (the first page is 'page'= 0). Default is `0`.") @Valid @RequestParam(value = "page", required = false) Integer page,
			@ApiParam(value = "The size of the pages to be returned. Default is `1000`.") @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;

}
