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

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 io.swagger.annotations.*;
import io.swagger.model.BrAPIResponse;
import io.swagger.model.Model202AcceptedSearchResponse;
import io.swagger.model.geno.AlleleMatrixResponse;
import io.swagger.model.geno.AlleleMatrixSearchRequest;
import jakarta.validation.Valid;

@javax.annotation.processing.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2022-06-17T15:45:22.167Z[GMT]")
@Validated
public interface AlleleMatrixApi {

	@ApiOperation(value = "Use this endpoint to retrieve a two dimensional matrix of genotype data", notes = "Use this endpoint to retrieve a two dimensional matrix of genotype data. The response structure is based on the VCF format, with the enhanced ability to slice and merge data sets. This allows the user to return the subset of data they are interested in, without having to download the entire genotype file. <br/>Each row of data (outer array) corresponds to a variant definition, and each column (inner array) corresponds to a callSet. ", authorizations = {
			@Authorization(value = "AuthorizationToken") }, tags = { "Allele Matrix" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = AlleleMatrixResponse.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 = "/allelematrix", produces = { "application/json" }, method = RequestMethod.GET)
	ResponseEntity<AlleleMatrixResponse> allelematrixGet(
			@ApiParam(value = "dimensionVariantPage") @Valid @RequestParam(value = "dimensionVariantPage", required = false) Integer dimensionVariantPage,
			@ApiParam(value = "dimensionVariantPageSize") @Valid @RequestParam(value = "dimensionVariantPageSize", required = false) Integer dimensionVariantPageSize,
			@ApiParam(value = "dimensionCallSetPage") @Valid @RequestParam(value = "dimensionCallSetPage", required = false) Integer dimensionCallSetPage,
			@ApiParam(value = "dimensionCallSetPageSize") @Valid @RequestParam(value = "dimensionCallSetPageSize", required = false) Integer dimensionCallSetPageSize,
			@ApiParam(value = "preview") @Valid @RequestParam(value = "preview", required = false) Boolean preview,
			@ApiParam(value = "dataMatrixNames") @Valid @RequestParam(value = "dataMatrixNames", required = false) String dataMatrixNames,
			@ApiParam(value = "dataMatrixAbbreviations") @Valid @RequestParam(value = "dataMatrixAbbreviations", required = false) String dataMatrixAbbreviations,
			@ApiParam(value = "positionRange") @Valid @RequestParam(value = "positionRange", required = false) String positionRange,
			@ApiParam(value = "germplasmDbId") @Valid @RequestParam(value = "germplasmDbId", required = false) String germplasmDbId,
			@ApiParam(value = "germplasmName") @Valid @RequestParam(value = "germplasmName", required = false) String germplasmName,
			@ApiParam(value = "germplasmPUI") @Valid @RequestParam(value = "germplasmPUI", required = false) String germplasmPUI,
			@ApiParam(value = "callSetDbId") @Valid @RequestParam(value = "callSetDbId", required = false) String callSetDbId,
			@ApiParam(value = "variantDbId") @Valid @RequestParam(value = "variantDbId", required = false) String variantDbId,
			@ApiParam(value = "variantSetDbId") @Valid @RequestParam(value = "variantSetDbId", required = false) 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 = "Authorization") @RequestHeader(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Submit a search request for a Allele Matrix", notes = "Use this endpoint to retrieve a two dimensional matrix of genotype data. The response structure is based on the VCF format, with the enhanced ability to slice and merge data sets. This allows the user to return the subset of data they are interested in, without having to download the entire genotype file. <br/>Each row of data (outer array) corresponds to a variant definition, and each column (inner array) corresponds to a callSet.  <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/calls/{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 = { "Allele Matrix" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = AlleleMatrixResponse.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/allelematrix", produces = { "application/json" }, consumes = {
			"application/json" }, method = RequestMethod.POST)
	ResponseEntity<? extends BrAPIResponse> searchAllelematrixPost(
			@ApiParam(value = "body") @Valid @RequestBody AlleleMatrixSearchRequest body,
			@ApiParam(value = "Authorization") @RequestParam(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

	@ApiOperation(value = "Get the results of a Allele Matrix search request", notes = "Use this endpoint to retrieve a two dimensional matrix of genotype data. The response structure is based on the VCF format, with the enhanced ability to slice and merge data sets. This allows the user to return the subset of data they are interested in, without having to download the entire genotype file. <br/>Each row of data (outer array) corresponds to a variant definition, and each column (inner array) corresponds to a callSet.  <br/>Clients should submit a search request using the corresponding `POST /search/allelematrix` 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 = { "Allele Matrix" })
	@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = AlleleMatrixResponse.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/allelematrix/{searchResultsDbId}", produces = {
			"application/json" }, method = RequestMethod.GET)
	ResponseEntity<? extends BrAPIResponse> searchAllelematrixSearchResultsDbIdGet(
			@ApiParam(value = "searchResultsDbId", required = true) @PathVariable("searchResultsDbId") String searchResultsDbId,
			@ApiParam(value = "Authorization") @RequestParam(value = "Authorization", required = false) String authorization)
			throws BrAPIServerException;

}
