package ${config.package}

import se.rutdev.projekt.api.HttpProtocol.VersionedResponse
import se.rutdev.framework.json.circe.RutUtilsCodec
import se.rutdev.framework
import se.rutdev.framework.service.api.{OAuthUtils, RequestMeta, RutTapir}
import se.rutdev.pd.ProblemDetailProtocol.ProblemDetail
import sttp.tapir.Schema
import se.senashdev.projekt.api.Protocol.*
import se.senashdev.projekt.api.Codecs._

class Endpoints(override val config: OAuthUtils.OAuthConfig) extends framework.service.api.Endpoints with RutTapir with RutUtilsCodec:
    type ApiEndpoint[I, O] = OAuthEndpoint[RequestMeta.OAuthRequestMeta, I, ProblemDetail, O]

<#list endpoints as endpoint>
    val ${endpoint.inputType?uncap_first}Endpoint = ApiEndpoint[${endpoint.inputType?cap_first}, VersionedResponse] =
    <#list endpoint.paths.paths>
        apiV1Endpoint
        .post
        <#items as segment>
        .in("${segment}")
        </#items>
        .in(jsonBody[${endpoint.inputType?cap_first}])
        .out(jsonBody[VersionedResponse])

    </#list>
</#list>