package match

// Matches is an alies for []Match used for sorting
type Matches []Match

func (s Matches) Len() int {
	return len(s)
}

func (s Matches) Swap(i, j int) {
	s[i], s[j] = s[j], s[i]
}

func (s Matches) Less(i, j int) bool {
	if s[i].I < s[j].I {
		return true
	} else if s[i].I == s[j].I {
		return s[i].J < s[j].J
	}
	return false
}

// Match represents different matches
type Match struct {
	Pattern        string
	I, J           int
	Token          string
	DictionaryName string
	Entropy        float64
}

// DateMatch is specifilly a match for type date
type DateMatch struct {
	Pattern          string
	I, J             int
	Token            string
	Separator        string
	Day, Month, Year int64
}

// Matcher are a func and ID that can be used to match different passwords
type Matcher struct {
	MatchingFunc func(password string) []Match
	ID           string
}
