{{>partial_header}}
package {{packageName}}

{{#operations}}
import (
	"github.com/go-macaron/binding"

	"github.com/grafana/grafana/pkg/api/routing"
	"github.com/grafana/grafana/pkg/api/response"
	"github.com/grafana/grafana/pkg/middleware/requestmeta"
	"github.com/grafana/grafana/pkg/models"
	apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
	"github.com/grafana/grafana/pkg/services/ngalert/metrics"
	"github.com/grafana/grafana/pkg/middleware"
	contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
)

type {{classname}} interface { {{#operation}}
	{{nickname}}(*contextmodel.ReqContext) response.Response{{/operation}}
}

{{#operations}}{{#operation}}
{{#vendorExtensions.x-raw-request}}
func (f *{{classname}}Handler) {{nickname}}(ctx *contextmodel.ReqContext) response.Response { {{#hasPathParams}}
	// Parse Path Parameters{{/hasPathParams}}{{#pathParams}}
	{{paramName}}Param := web.Params(ctx.Req)[":{{baseName}}"]{{/pathParams}}
	return f.handle{{nickname}}(ctx{{#pathParams}}, {{paramName}}Param{{/pathParams}})
}
{{/vendorExtensions.x-raw-request}}
{{^vendorExtensions.x-raw-request}}
func (f *{{classname}}Handler) {{nickname}}(ctx *contextmodel.ReqContext) response.Response { {{#hasPathParams}}
	// Parse Path Parameters{{/hasPathParams}}{{#pathParams}}
	{{paramName}}Param := web.Params(ctx.Req)[":{{baseName}}"]{{/pathParams}}
	{{#bodyParams}}
	// Parse Request Body
	conf := apimodels.{{dataType}}{}
	if err := web.Bind(ctx.Req, &conf); err != nil {
		return response.Error(http.StatusBadRequest, "bad request data", err)
	}
	{{/bodyParams}}return f.handle{{nickname}}(ctx{{#bodyParams}}, conf{{/bodyParams}}{{#pathParams}}, {{paramName}}Param{{/pathParams}})
}
{{/vendorExtensions.x-raw-request}}
{{/operation}}{{/operations}}

func (api *API) Register{{classname}}Endpoints(srv {{classname}}, m *metrics.API) {
	api.RouteRegister.Group("", func(group routing.RouteRegister){ {{#operations}}{{#operation}}
	group.{{httpMethod}}(
		toMacaronPath("/api{{{path}}}"),
		requestmeta.SetOwner(requestmeta.TeamAlerting),
		requestmeta.SetSLOGroup(requestmeta.SLOGroupHighSlow),
		api.authorize(http.Method{{httpMethod}}, "/api{{{path}}}"),
		metrics.Instrument(
			http.Method{{httpMethod}},
			"/api{{{path}}}",
			api.Hooks.Wrap(srv.{{nickname}}),
			m,
		),
  ){{/operation}}{{/operations}}
	}, middleware.ReqSignedIn)
}{{#operation}}
{{/operation}}{{/operations}}
