// Helper functions for request/response handling in chi-style HTTP handlers.

// PathParam extracts a path parameter from a chi router request.
// It looks up the parameter by name from the request context.
func PathParam(r *http.Request, name string) string {
	// chi stores path parameters in the request context.
	// chi.URLParam reads the value by name.
	return chi.URLParam(r, name)
}

// QueryParam extracts a query parameter from the request.
func QueryParam(r *http.Request, name string) string {
	return r.URL.Query().Get(name)
}

// HeaderParam extracts a header value from the request.
func HeaderParam(r *http.Request, name string) string {
	return r.Header.Get(name)
}

// BindJSON unmarshals the request body into the provided interface.
func BindJSON(r *http.Request, v interface{}) error {
	defer r.Body.Close()
	decoder := json.NewDecoder(r.Body)
	return decoder.Decode(v)
}

// RespondJSON marshals the value to JSON and writes it to the response.
func RespondJSON(w http.ResponseWriter, status int, v interface{}) error {
	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(status)
	encoder := json.NewEncoder(w)
	return encoder.Encode(v)
}
