package {{package}}

{{#imports}}import {{import}}
{{/imports}}
import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
import org.springframework.web.context.request.NativeWebRequest
import org.springframework.core.io.Resource
{{#reactive}}
    import kotlinx.coroutines.flow.Flow
{{/reactive}}

import java.util.Optional
{{#async}}
    import java.util.concurrent.CompletableFuture
{{/async}}

{{#operations}}
    /**
    * A delegate to be called by the {@link {{classname}}Controller}}.
    * Implement this interface with a {@link org.springframework.stereotype.Service} annotated class.
    */
    {{>generatedAnnotation}}
    interface {{classname}}Delegate {

    fun getRequest(): Optional
    <NativeWebRequest> = Optional.empty()
    {{#operation}}

            /**
            * @see {{classname}}#{{operationId}}
            */
        {{#reactive}}{{^isArray}}suspend {{/isArray}}{{/reactive}}fun {{operationId}}({{#allParams}}{{paramName}}
            : {{^isFile}}{{^reactive}}{{>optionalDataType}}{{/reactive}}{{#reactive}}{{^isArray}}{{>optionalDataType}}{{/isArray}}{{#isArray}}{{#isBodyParam}}
                Flow<{{{baseType}}}
                >{{/isBodyParam}}{{^isBodyParam}}{{>optionalDataType}}{{/isBodyParam}}{{/isArray}}{{/reactive}}{{/isFile}}{{#isFile}}
                Resource?{{/isFile}}{{^-last}},
        {{/-last}}{{/allParams}}): {{#responseWrapper}}{{.}}
                <{{/responseWrapper}}ResponseEntity<{{>returnTypes}}>{{#responseWrapper}}>{{/responseWrapper}} {
        {{>methodBody}}
            }

    {{/operation}}
        }
{{/operations}}
