package org.wfc.omada.api.sitesetting;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.cloud.openfeign.FeignClient;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.wfc.omada.config.FeignConfig;
import org.wfc.omada.api.sitesetting.model.AlgSetting;
import org.wfc.omada.api.sitesetting.model.OperationResponseAlgSetting;
import org.wfc.omada.api.sitesetting.model.OperationResponseGridVoOtoNatInfoOpenApiVo;
import org.wfc.omada.api.sitesetting.model.OperationResponseGridVoPortForwardingInfo;
import org.wfc.omada.api.sitesetting.model.OperationResponseWithoutResult;
import org.wfc.omada.api.sitesetting.model.OtoNatOpenApiVo;
import org.wfc.omada.api.sitesetting.model.PortForwardingConfig;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T11:31:51.978+08:00[Asia/Shanghai]")

@Validated
@Api(value = "OmadaNat", description = "the OmadaNat API")
@FeignClient(name="OmadaNatApi", url = "${omada.omada-url}", configuration = FeignConfig.class)
public interface OmadaNatApi {

    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/nat/one-to-one-nat : Create new One-to-One NAT
     * Create new One-to-One NAT.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param otoNatOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create new One-to-One NAT", nickname = "createOtoNat", notes = "Create new One-to-One NAT.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/one-to-one-nat",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createOtoNat(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) OtoNatOpenApiVo otoNatOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/nat/port-forwardings : Create new port forwarding
     * Create new port forwarding.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param portForwardingConfig  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create new port forwarding", nickname = "createPortForwarding", notes = "Create new port forwarding.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/port-forwardings",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createPortForwarding(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) PortForwardingConfig portForwardingConfig);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/nat/one-to-one-nat/{otonatId} : Delete One-to-One NAT
     * Delete One-to-One NAT.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param otonatId  (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete One-to-One NAT", nickname = "deleteOtoNat", notes = "Delete One-to-One NAT.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/one-to-one-nat/{otonatId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteOtoNat(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "",required=true) @PathVariable("otonatId") String otonatId);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/nat/port-forwardings/{portForwardingId} : Delete port forwarding
     * Delete port forwarding.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param portForwardingId  (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete port forwarding", nickname = "deletePortForwarding", notes = "Delete port forwarding.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/port-forwardings/{portForwardingId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deletePortForwarding(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "",required=true) @PathVariable("portForwardingId") String portForwardingId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/nat/alg : Get ALG Info
     * Get ALG Info.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get ALG Info", nickname = "getAlg", notes = "Get ALG Info.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseAlgSetting.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseAlgSetting.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/alg",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseAlgSetting> getAlg(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/nat/one-to-one-nat : Get One-to-One NAT list
     * Get One-to-One NAT list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get One-to-One NAT list", nickname = "getGridOtoNats", notes = "Get One-to-One NAT list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseGridVoOtoNatInfoOpenApiVo.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoOtoNatInfoOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/one-to-one-nat",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoOtoNatInfoOpenApiVo> getGridOtoNats(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/nat/port-forwardings : Get port forwarding list
     * Get port forwarding list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get port forwarding list", nickname = "getPortForwardingList", notes = "Get port forwarding list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseGridVoPortForwardingInfo.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoPortForwardingInfo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/port-forwardings",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoPortForwardingInfo> getPortForwardingList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize);


    /**
     * PUT /openapi/v1/{omadacId}/sites/{siteId}/nat/alg : Modify ALG setting
     * Modify ALG setting.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param algSetting  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify ALG setting", nickname = "modifyAlg", notes = "Modify ALG setting.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/alg",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PUT)
    ResponseEntity<OperationResponseWithoutResult> modifyAlg(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) AlgSetting algSetting);


    /**
     * PUT /openapi/v1/{omadacId}/sites/{siteId}/nat/one-to-one-nat/{otonatId} : Modify One-to-One NAT
     * Modify One-to-One NAT.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param otonatId  (required)
     * @param otoNatOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify One-to-One NAT", nickname = "modifyOtoNat", notes = "Modify One-to-One NAT.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/one-to-one-nat/{otonatId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PUT)
    ResponseEntity<OperationResponseWithoutResult> modifyOtoNat(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "",required=true) @PathVariable("otonatId") String otonatId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) OtoNatOpenApiVo otoNatOpenApiVo);


    /**
     * PUT /openapi/v1/{omadacId}/sites/{siteId}/nat/port-forwardings/{portForwardingId} : Modify port forwarding
     * Modify port forwarding.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param portForwardingId  (required)
     * @param portForwardingConfig  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify port forwarding", nickname = "modifyPortForwarding", notes = "Modify port forwarding.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/NAT","NAT", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/nat/port-forwardings/{portForwardingId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PUT)
    ResponseEntity<OperationResponseWithoutResult> modifyPortForwarding(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "",required=true) @PathVariable("portForwardingId") String portForwardingId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) PortForwardingConfig portForwardingConfig);

}
