package processors

import (
	"regexp"

	"github.com/golangci/golangci-lint/pkg/result"
)

type ExcludeProcessor struct {
	pattern *regexp.Regexp
}

var _ Processor = ExcludeProcessor{}

func NewExcludeProcessor(pattern string) *ExcludeProcessor {
	return &ExcludeProcessor{
		pattern: regexp.MustCompile(pattern),
	}
}

func (p ExcludeProcessor) Name() string {
	return "exclude"
}

func (p ExcludeProcessor) processResult(res result.Result) result.Result {
	newRes := res
	newRes.Issues = []result.Issue{}
	for _, i := range res.Issues {
		if !p.pattern.MatchString(i.Text) {
			newRes.Issues = append(newRes.Issues, i)
		}
	}

	return newRes
}

func (p ExcludeProcessor) Process(results []result.Result) ([]result.Result, error) {
	retResults := []result.Result{}
	for _, res := range results {
		retResults = append(retResults, p.processResult(res))
	}

	return retResults, nil
}