package exceptions

import (
	kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
	"k8s.io/apimachinery/pkg/labels"
)

type Lister interface {
	List(labels.Selector) ([]*kyvernov2.PolicyException, error)
}

type selector struct {
	lister Lister
}

func New(lister Lister) selector {
	return selector{
		lister: lister,
	}
}

func (s selector) Find(policyName string, ruleName string) ([]*kyvernov2.PolicyException, error) {
	polexs, err := s.lister.List(labels.Everything())
	if err != nil {
		return nil, err
	}
	var results []*kyvernov2.PolicyException
	for _, polex := range polexs {
		if polex.Contains(policyName, ruleName) {
			results = append(results, polex)
		}
	}
	return results, nil
}