/**
 * 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.germ;

import io.swagger.model.germ.SeedLotListResponse;
import io.swagger.model.germ.SeedLotNewRequest;
import io.swagger.model.germ.SeedLotNewTransactionRequest;
import io.swagger.model.germ.SeedLotSingleResponse;
import io.swagger.model.germ.SeedLotTransactionListResponse;
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;
import java.util.List;

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

	@ApiOperation(value = "Get a filtered list of Seed Lot descriptions", nickname = "seedlotsGet", notes = "Get a filtered list of Seed Lot descriptions available in a system.", response = SeedLotListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotListResponse.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 = "/seedlots", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeedLotListResponse> seedlotsGet(
			@ApiParam(value = "seedLotDbId") @Valid @RequestParam(value = "seedLotDbId", required = false) String seedLotDbId,
			@ApiParam(value = "germplasmDbId") @Valid @RequestParam(value = "germplasmDbId", required = false) String germplasmDbId,
			@ApiParam(value = "germplasmName") @Valid @RequestParam(value = "germplasmName", required = false) String germplasmName,
			@ApiParam(value = "crossDbId") @Valid @RequestParam(value = "crossDbId", required = false) String crossDbId,
			@ApiParam(value = "crossName") @Valid @RequestParam(value = "crossName", required = false) String crossName,
			@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 = "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 = "Add new Seed Lot descriptions to a server", nickname = "seedlotsPost", notes = "Add new Seed Lot descriptions to a server", response = SeedLotListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotListResponse.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 = "/seedlots", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<SeedLotListResponse> seedlotsPost(
			@ApiParam(value = "") @Valid @RequestBody List<SeedLotNewRequest> 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 = "Get a specific Seed Lot", nickname = "seedlotsSeedLotDbIdGet", notes = "Get a specific Seed Lot by seedLotDbId", response = SeedLotSingleResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotSingleResponse.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 = "/seedlots/{seedLotDbId}", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeedLotSingleResponse> seedlotsSeedLotDbIdGet(
			@ApiParam(value = "Unique id for a seed lot on this server", required = true) @PathVariable("seedLotDbId") String seedLotDbId,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Update an existing Seed Lot", nickname = "seedlotsSeedLotDbIdPut", notes = "Update an existing Seed Lot", response = SeedLotSingleResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotSingleResponse.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 = "/seedlots/{seedLotDbId}", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.PUT)
	ResponseEntity<SeedLotSingleResponse> seedlotsSeedLotDbIdPut(
			@ApiParam(value = "Unique id for a seed lot on this server", required = true) @PathVariable("seedLotDbId") String seedLotDbId,
			@ApiParam(value = "") @Valid @RequestBody SeedLotNewRequest 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 = "Get all Transactions related to a specific Seed Lot", nickname = "seedlotsSeedLotDbIdTransactionsGet", notes = "Get all Transactions related to a specific Seed Lot", response = SeedLotTransactionListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotTransactionListResponse.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 = "/seedlots/{seedLotDbId}/transactions", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeedLotTransactionListResponse> seedlotsSeedLotDbIdTransactionsGet(
			@ApiParam(value = "Unique id for a seed lot on this server", required = true) @PathVariable("seedLotDbId") String seedLotDbId,
			@ApiParam(value = "Unique id for a Transaction that has occured") @Valid @RequestParam(value = "transactionDbId", required = false) String transactionDbId,
			@ApiParam(value = "Filter results to only include transactions directed to the specific Seed Lot (TO), away from the specific Seed Lot (FROM), or both (BOTH). The default value for this parameter is BOTH", allowableValues = "TO, FROM, BOTH") @Valid @RequestParam(value = "transactionDirection", required = false) String transactionDirection,
			@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 a filtered list of Seed Lot Transactions", nickname = "seedlotsTransactionsGet", notes = "Get a filtered list of Seed Lot Transactions", response = SeedLotTransactionListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotTransactionListResponse.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 = "/seedlots/transactions", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeedLotTransactionListResponse> seedlotsTransactionsGet(
			@ApiParam(value = "transactionDbId") @Valid @RequestParam(value = "transactionDbId", required = false) String transactionDbId,
			@ApiParam(value = "seedLotDbId") @Valid @RequestParam(value = "seedLotDbId", required = false) String seedLotDbId,
			@ApiParam(value = "germplasmDbId") @Valid @RequestParam(value = "germplasmDbId", required = false) String germplasmDbId,
			@ApiParam(value = "germplasmName") @Valid @RequestParam(value = "germplasmName", required = false) String germplasmName,
			@ApiParam(value = "crossDbId") @Valid @RequestParam(value = "crossDbId", required = false) String crossDbId,
			@ApiParam(value = "crossName") @Valid @RequestParam(value = "crossName", required = false) String crossName,
			@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 = "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 = "Add new Seed Lot Transaction to be recorded", nickname = "seedlotsTransactionsPost", notes = "Add new Seed Lot Transaction to be recorded", response = SeedLotTransactionListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seed Lots", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeedLotTransactionListResponse.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 = "/seedlots/transactions", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<SeedLotTransactionListResponse> seedlotsTransactionsPost(
			@ApiParam(value = "") @Valid @RequestBody List<SeedLotNewTransactionRequest> body,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

}
