package http

import (
	"net/http"
	"slices"
)

func RemoveHop(h http.Header) {
	reqUpType := UpgradeType(h)
	RemoveHopByHopHeaders(h)

	if reqUpType != "" {
		h.Set("Connection", "Upgrade")
		h.Set("Upgrade", reqUpType)
	} else {
		h.Del("Connection")
	}
}

func CopyHeader(dst, src http.Header) {
	for k, vv := range src {
		for _, v := range vv {
			dst.Add(k, v)
		}
	}
}

func FilterHeaders(h http.Header, allowed []string) {
	if allowed == nil {
		return
	}

	for i := range allowed {
		allowed[i] = http.CanonicalHeaderKey(allowed[i])
	}

	for key := range h {
		if !slices.Contains(allowed, key) {
			h.Del(key)
		}
	}
}