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

import io.swagger.model.core.Season;
import io.swagger.model.core.SeasonListResponse;
import io.swagger.model.core.SeasonSingleResponse;
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:31:52.030Z[GMT]")
@Api(value = "seasons", description = "the seasons API")
public interface SeasonsApi {

	@ApiOperation(value = "Get the Seasons", nickname = "seasonsGet", notes = "Call to retrieve all seasons in the database.  A season is made of 2 parts; the primary year and a term which defines a segment of the year.  This could be a traditional season, like \"Spring\" or \"Summer\" or this could be a month, like  \"May\" or \"June\" or this could be an arbitrary season name which is meaningful to the breeding  program like \"PlantingTime_3\" or \"Season E\"", response = SeasonListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seasons", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeasonListResponse.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 = "/seasons", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeasonListResponse> seasonsGet(
			@ApiParam(value = "seasonDbId") @Valid @RequestParam(value = "seasonDbId", required = false) String seasonDbId,
			@ApiParam(value = "season") @Valid @RequestParam(value = "season", required = false) String season,
			@ApiParam(value = "seasonName") @Valid @RequestParam(value = "season", required = false) String seasonName,
			@ApiParam(value = "year") @Valid @RequestParam(value = "year", required = false) Integer year,
			@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 = "POST new Seasons", nickname = "seasonsPost", notes = "Add new season entries to the database", response = SeasonListResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seasons", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeasonListResponse.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 = "/seasons", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<SeasonListResponse> seasonsPost(@ApiParam(value = "") @Valid @RequestBody List<Season> 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 the a single Season", nickname = "seasonsSeasonDbIdGet", notes = "Get the a single Season", response = SeasonSingleResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seasons", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeasonSingleResponse.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 = "/seasons/{seasonDbId}", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<SeasonSingleResponse> seasonsSeasonDbIdGet(
			@ApiParam(value = "The unique identifier for a season. For backward compatibility it can be a string like '2012', '1957-2004'", required = true) @PathVariable("seasonDbId") String seasonDbId,
			@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 existing Seasons", nickname = "seasonsSeasonDbIdPut", notes = "Update existing Seasons", response = SeasonSingleResponse.class, authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Seasons", })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = SeasonSingleResponse.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 = "/seasons/{seasonDbId}", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.PUT)
	ResponseEntity<SeasonSingleResponse> seasonsSeasonDbIdPut(
			@ApiParam(value = "The unique identifier for a season. For backward compatibility it can be a string like '2012', '1957-2004'", required = true) @PathVariable("seasonDbId") String seasonDbId,
			@ApiParam(value = "") @Valid @RequestBody Season body,
			@ApiParam(value = "HTTP HEADER - Token used for Authorization   <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization) throws BrAPIServerException;

}
