package ctx

import (
	"context"
	"net/http"
	"strings"

	"github.com/unistack-org/micro/v3/metadata"
)

func FromRequest(r *http.Request) context.Context {
	ctx := r.Context()
	md, ok := metadata.FromContext(ctx)
	if !ok {
		// create needed map with specific len
		md = make(metadata.Metadata, len(r.Header)+2)
	}
	for key, val := range r.Header {
		md.Set(key, strings.Join(val, ","))
	}
	// pass http host
	md["Host"] = r.Host
	// pass http method
	md["Method"] = r.Method
	return metadata.NewContext(ctx, md)
}