package helpers

import (
	"context"
	"net/http"

	"go.uber.org/zap"
)

type ContextKey string

const ResponseInfoKey ContextKey = "response_info"

type ResponseInfo struct {
	ReturnCode    int
	ContentLength int
}

func HandleResponse(w http.ResponseWriter, r *http.Request, returncode int, content []byte, l *zap.SugaredLogger) {
	w.WriteHeader(returncode)
	n, err := w.Write(content)
	if err != nil {
		l.Errorf("Failed to write content to response: %q", err.Error())
	}
	if n != len(content) {
		l.Errorf("Failed to write the entire response (%d/%d)", n, len(content))
	}

	contextedReq := r.WithContext(context.WithValue(r.Context(), ResponseInfoKey, ResponseInfo{ReturnCode: returncode, ContentLength: len(content)}))
	*r = *contextedReq
}
