package edgediscovery

import (
	"fmt"
	"net"
	"strconv"
	"strings"
)

const (
	protocolRecord = "protocol.argotunnel.com"
)

var (
	errNoProtocolRecord = fmt.Errorf("No TXT record found for %s to determine connection protocol", protocolRecord)
)

func HTTP2Percentage() (int32, error) {
	records, err := net.LookupTXT(protocolRecord)
	if err != nil {
		return 0, err
	}
	if len(records) == 0 {
		return 0, errNoProtocolRecord
	}
	return parseHTTP2Precentage(records[0])
}

// The record looks like http2=percentage
func parseHTTP2Precentage(record string) (int32, error) {
	const key = "http2"
	slices := strings.Split(record, "=")
	if len(slices) != 2 {
		return 0, fmt.Errorf("Malformed TXT record %s, expect http2=percentage", record)
	}
	if slices[0] != key {
		return 0, fmt.Errorf("Incorrect key %s, expect %s", slices[0], key)
	}
	percentage, err := strconv.ParseInt(slices[1], 10, 32)
	if err != nil {
		return 0, err
	}
	return int32(percentage), nil

}