package pruning

import (
	"regexp"
)

type KeepRegex struct {
	expr   *regexp.Regexp
	negate bool
}

var _ KeepRule = &KeepRegex{}

func NewKeepRegex(expr string, negate bool) (*KeepRegex, error) {
	re, err := regexp.Compile(expr)
	if err != nil {
		return nil, err
	}
	return &KeepRegex{re, negate}, nil
}

func MustKeepRegex(expr string, negate bool) *KeepRegex {
	k, err := NewKeepRegex(expr, negate)
	if err != nil {
		panic(err)
	}
	return k
}

func (k *KeepRegex) KeepRule(snaps []Snapshot) []Snapshot {
	return filterSnapList(snaps, func(s Snapshot) bool {
		if k.negate {
			return k.expr.FindStringIndex(s.Name()) != nil
		} else {
			return k.expr.FindStringIndex(s.Name()) == nil
		}
	})
}