package header

import "github.com/timandy/routine"

var fieldsInfoLocalStorage = routine.NewThreadLocal[*FieldsInfo]()

// FieldsInfo
// http header info
type FieldsInfo struct {
	PressureTestValue string
	FunctionTestValue string
	TranceID          string
}

func newFieldsInfo() *FieldsInfo {
	return &FieldsInfo{}
}

func SetPressureTestValue(pressureTestValue string) {
	currentFieldsInfo := getCurrentFieldsInfo()
	currentFieldsInfo.PressureTestValue = pressureTestValue
	setCurrentFieldsInfo(currentFieldsInfo)
}

func GetPressureTestValue() string {
	return getCurrentFieldsInfo().PressureTestValue
}

func SetFunctionTestValue(functionTestValue string) {
	currentFieldsInfo := getCurrentFieldsInfo()
	currentFieldsInfo.FunctionTestValue = functionTestValue
	setCurrentFieldsInfo(currentFieldsInfo)
}

func GetFunctionTestValue() string {
	return getCurrentFieldsInfo().FunctionTestValue
}

func SetTraceID(tranceID string) {
	currentFieldsInfo := getCurrentFieldsInfo()
	currentFieldsInfo.TranceID = tranceID
	setCurrentFieldsInfo(currentFieldsInfo)
}

func GetTraceID() string {
	return getCurrentFieldsInfo().TranceID
}

func setCurrentFieldsInfo(fieldsInfo *FieldsInfo) {
	if fieldsInfo == nil {
		fieldsInfoLocalStorage.Set(newFieldsInfo())
		return
	}
	fieldsInfoLocalStorage.Set(fieldsInfo)
}

func getCurrentFieldsInfo() *FieldsInfo {
	fieldsInfo := fieldsInfoLocalStorage.Get()
	if fieldsInfo == nil {
		return newFieldsInfo()
	}
	return fieldsInfo
}
