package etcd

import (
	"strings"

	"github.com/miekg/coredns/middleware/etcd/msg"

	"github.com/miekg/dns"
)

const debugName = "o-o.debug."

// isDebug checks if name is a debugging name, i.e. starts with o-o.debug.
// it return the empty string if it is not a debug message, otherwise it will return the
// name with o-o.debug. stripped off. Must be called with name lowercased.
func isDebug(name string) string {
	if len(name) == len(debugName) {
		return ""
	}
	name = strings.ToLower(name)
	debug := strings.HasPrefix(name, debugName)
	if !debug {
		return ""
	}
	return name[len(debugName):]
}

// servicesToTxt puts debug in TXT RRs.
func servicesToTxt(debug []msg.Service) []dns.RR {
	if debug == nil {
		return nil
	}

	rr := make([]dns.RR, len(debug))
	for i, d := range debug {
		rr[i] = d.RR()
	}
	return rr
}

func errorToTxt(err error) dns.RR {
	if err == nil {
		return nil
	}
	msg := err.Error()
	if len(msg) > 255 {
		msg = msg[:255]
	}
	t := new(dns.TXT)
	t.Hdr.Class = dns.ClassCHAOS
	t.Hdr.Ttl = 0
	t.Hdr.Rrtype = dns.TypeTXT
	t.Hdr.Name = "."

	t.Txt = []string{msg}
	return t
}
