package parsing

import "regexp"

func extract(re *regexp.Regexp, src []byte, subexpName string) []byte {
	m := re.FindSubmatch(src)
	if m == nil {
		return nil
	}
	return m[re.SubexpIndex(subexpName)]
}

func extractMap(re *regexp.Regexp, src []byte) map[string][]byte {
	m := re.FindSubmatch(src)
	if m == nil {
		return nil
	}
	res := make(map[string][]byte)
	for _, name := range re.SubexpNames() {
		if name != "" {
			i := re.SubexpIndex(name)
			res[name] = m[i]
		}
	}
	res["all"] = m[0]
	return res
}

func extractAll(re *regexp.Regexp, src []byte, subexpName string) [][]byte {
	m := re.FindAllSubmatch(src, -1)
	if m == nil {
		return nil
	}
	return m[re.SubexpIndex(subexpName)]
}

func extractAllMap(re *regexp.Regexp, src []byte) map[string][][]byte {
	m := re.FindAllSubmatch(src, -1)
	if m == nil {
		return nil
	}
	res := make(map[string][][]byte)
	for i, name := range re.SubexpNames() {
		if name != "" {
			var vals [][]byte
			for _, specificMatch := range m {
				vals = append(vals, specificMatch[i])
			}
			res[name] = vals
		}
	}
	res["all"] = m[0]
	return res
}
