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

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.Authorization;
import io.swagger.model.BrAPIResponse;
import io.swagger.model.Model202AcceptedSearchResponse;
import io.swagger.model.germ.PedigreeListResponse;
import io.swagger.model.germ.PedigreeNode;
import io.swagger.model.germ.PedigreeSearchRequest;

import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
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;
import java.util.List;
import java.util.Map;

@javax.annotation.processing.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2022-06-03T22:50:47.807Z[GMT]")
@Validated
public interface PedigreeApi {

	@ApiOperation(value = "Get a filtered list of pedigree nodes which represent a subset of a pedigree tree", notes = "Get a filtered list of pedigree nodes which represent a subset of a pedigree tree", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Pedigree" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = PedigreeListResponse.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 = "/pedigree", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<PedigreeListResponse> pedigreeGet(
			@ApiParam(value = "germplasmPUI") @jakarta.validation.Valid @RequestParam(value = "germplasmPUI", required = false) String germplasmPUI,
			@ApiParam(value = "germplasmDbId") @Valid @RequestParam(value = "germplasmDbId", required = false) String germplasmDbId,
			@ApiParam(value = "germplasmName") @Valid @RequestParam(value = "germplasmName", required = false) String germplasmName,
			@ApiParam(value = "accessionNumber") @Valid @RequestParam(value = "accessionNumber", required = false) String accessionNumber,
			@ApiParam(value = "collection") @Valid @RequestParam(value = "collection", required = false) String collection,
			@ApiParam(value = "familyCode") @Valid @RequestParam(value = "familyCode", required = false) String familyCode,
			@ApiParam(value = "binomialName") @Valid @RequestParam(value = "binomialName", required = false) String binomialName,
			@ApiParam(value = "genus") @Valid @RequestParam(value = "genus", required = false) String genus,
			@ApiParam(value = "species") @Valid @RequestParam(value = "species", required = false) String species,
			@ApiParam(value = "trialDbId") @Valid @RequestParam(value = "trialDbId", required = false) String trialDbId,
			@ApiParam(value = "studyDbId") @Valid @RequestParam(value = "studyDbId", required = false) String studyDbId,
			@ApiParam(value = "synonym") @Valid @RequestParam(value = "synonym", required = false) String synonym,
			@ApiParam(value = "includeParents") @Valid @RequestParam(value = "includeParents", required = false) Boolean includeParents,
			@ApiParam(value = "includeSiblings") @Valid @RequestParam(value = "includeSiblings", required = false) Boolean includeSiblings,
			@ApiParam(value = "includeProgeny") @Valid @RequestParam(value = "includeProgeny", required = false) Boolean includeProgeny,
			@ApiParam(value = "includeFullTree") @Valid @RequestParam(value = "includeFullTree", required = false) Boolean includeFullTree,
			@ApiParam(value = "pedigreeDepth") @Valid @RequestParam(value = "pedigreeDepth", required = false) Integer pedigreeDepth,
			@ApiParam(value = "progenyDepth") @Valid @RequestParam(value = "progenyDepth", required = false) Integer progenyDepth,
			@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 = "Send a list of new pedigree nodes to a server", notes = "Send a list of new pedigree nodes to a server", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Pedigree" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = PedigreeListResponse.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 = "/pedigree", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<PedigreeListResponse> pedigreePost(
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization,
			@ApiParam(value = "") @Valid @RequestBody List<PedigreeNode> body) throws BrAPIServerException;

	@ApiOperation(value = "Send a list of pedigree nodes to update existing information on a server", notes = "Send a list of pedigree nodes to update existing information on a server", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Pedigree" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = PedigreeListResponse.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 = "/pedigree", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.PUT)
	ResponseEntity<PedigreeListResponse> pedigreePut(
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization,
			@ApiParam(value = "") @Valid @RequestBody Map<String, PedigreeNode> body) throws BrAPIServerException;

	@ApiOperation(value = "Submit a search request for `Pedigree`", notes = "Submit a search request for `Pedigree`<br/> Search requests allow a client to send a complex query for data. However, the server may not respond with the search results immediately.  If a server needs more time to process the request, it might respond with a `searchResultsDbId`.  Use the corresponding `GET /search/germplasm/{searchResultsDbId}` to retrieve the results of the search. <br/>  Review the <a target=\"_blank\" href=\"https://wiki.brapi.org/index.php/Search_Services#POST_Search_Entity\">Search Services documentation</a> for additional implementation details.", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Pedigree" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = PedigreeListResponse.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/pedigree", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<? extends BrAPIResponse> searchPedigreePost(
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization,
			@ApiParam(value = "") @Valid @RequestBody PedigreeSearchRequest body) throws BrAPIServerException ;

	@ApiOperation(value = "Get the results of a `Pedigree` search request", notes = "Get the results of a `Pedigree` search request <br/> Clients should submit a search request using the corresponding `POST /search/germplasm` endpoint. Search requests allow a client to send a complex query for data. However, the server may not respond with the search results immediately.  If a server needs more time to process the request, it might respond with a `searchResultsDbId`.  Use this endpoint to retrieve the results of the search. <br/>  Review the <a target=\"_blank\" href=\"https://wiki.brapi.org/index.php/Search_Services#POST_Search_Entity\">Search Services documentation</a> for additional implementation details.", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Pedigree" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = PedigreeListResponse.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),
			@ApiResponse(code = 404, message = "Not Found", response = String.class) })
	@RequestMapping(value = "/search/pedigree/{searchResultsDbId}", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<? extends BrAPIResponse> searchPedigreeSearchResultsDbIdGet(
			@ApiParam(value = "Unique identifier which references the search results", required = true) @PathVariable("searchResultsDbId") String searchResultsDbId,
			@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 ;

}
