package protocol

import (
	"net/http"
	"strconv"
)

const (
	URLHost = "hysteria"
	URLPath = "/auth"

	RequestHeaderAuth        = "Hysteria-Auth"
	ResponseHeaderUDPEnabled = "Hysteria-UDP"
	CommonHeaderCCRX         = "Hysteria-CC-RX"
	CommonHeaderPadding      = "Hysteria-Padding"

	StatusAuthOK = 233
)

func AuthRequestDataFromHeader(h http.Header) (auth string, rx uint64) {
	auth = h.Get(RequestHeaderAuth)
	rx, _ = strconv.ParseUint(h.Get(CommonHeaderCCRX), 10, 64)
	return
}

func AuthRequestDataToHeader(h http.Header, auth string, rx uint64) {
	h.Set(RequestHeaderAuth, auth)
	h.Set(CommonHeaderCCRX, strconv.FormatUint(rx, 10))
	h.Set(CommonHeaderPadding, authRequestPadding.String())
}

func AuthResponseDataFromHeader(h http.Header) (udp bool, rx uint64) {
	udp, _ = strconv.ParseBool(h.Get(ResponseHeaderUDPEnabled))
	rx, _ = strconv.ParseUint(h.Get(CommonHeaderCCRX), 10, 64)
	return
}

func AuthResponseDataToHeader(h http.Header, udp bool, rx uint64) {
	h.Set(ResponseHeaderUDPEnabled, strconv.FormatBool(udp))
	h.Set(CommonHeaderCCRX, strconv.FormatUint(rx, 10))
	h.Set(CommonHeaderPadding, authResponsePadding.String())
}