package golangci

import (
	"regexp"

	"github.com/kisielk/errcheck/internal/errcheck"
	"golang.org/x/tools/go/loader"
)

type Issue errcheck.UncheckedError

func Run(program *loader.Program, checkBlank, checkAsserts bool) ([]Issue, error) {
	checker := errcheck.NewChecker()
	checker.Blank = checkBlank
	checker.Asserts = checkAsserts

	checker.Ignore = map[string]*regexp.Regexp{
		"fmt": regexp.MustCompile(".*"),
	}

	if err := checker.CheckProgram(program); err != nil {
		if e, ok := err.(*errcheck.UncheckedErrors); ok {
			return makeIssues(e), nil
		}
		if err == errcheck.ErrNoGoFiles {
			return nil, nil
		}

		return nil, err
	}

	// no issues
	return nil, nil
}

func makeIssues(e *errcheck.UncheckedErrors) []Issue {
	var ret []Issue
	for _, uncheckedError := range e.Errors {
		ret = append(ret, Issue(uncheckedError))
	}

	return ret
}