// forecast_endpoint.go defines the /forecast/hourly endpoint behavior.
// Layer: adapters/inbound/httpapi forecast route.
package httpapi

import (
	"context"

	"gitea.maximumdirect.net/ejr/feedapi/endpoint"
	"gitea.maximumdirect.net/ejr/feedapi/render"
	"gitea.maximumdirect.net/ejr/feedapi/response"
	"gitea.maximumdirect.net/ejr/weatherapi/internal/adapters/inbound/httpapi/presenter"
)

func forecastDefinition(svc Service) endpoint.Definition {
	return endpoint.GET(
		"/forecast/hourly",
		bindForecastPrecisionQuery,
		func(ctx context.Context, req precisionQueryRequest) (any, error) {
			run, err := svc.LatestHourlyForecast(ctx)
			if err != nil {
				return nil, err
			}
			return response.Envelope{Data: presenter.ForecastPayload(run, req.Units, req.Precision, req.Timezone)}, nil
		},
		endpoint.WithProduces(render.FormatJSON, render.FormatXML, render.FormatText),
		endpoint.WithTemplate("forecast_hourly.txt.tmpl"),
	)
}
