package loglist

import "sync"

var lintlist struct {
	sync.Once
	list List
	err  error
}

// InitLintList creates and stores a loglist intended for linting (i.e. with
// purpose Validation). Test logs are included only when submitToTestLogs is
// true. We have to store this in a global because the zlint framework doesn't
// (yet) support configuration, so the e_scts_from_same_operator lint cannot
// load a log list on its own. Instead, we have the CA call this initialization
// function at startup, and have the lint call the getter below to get access to
// the cached list.
func InitLintList(path string, submitToTestLogs bool) error {
	lintlist.Do(func() {
		l, err := New(path)
		if err != nil {
			lintlist.err = err
			return
		}

		l, err = l.forPurpose(Validation, submitToTestLogs)
		if err != nil {
			lintlist.err = err
			return
		}

		lintlist.list = l
	})

	return lintlist.err
}

// GetLintList returns the log list initialized by InitLintList. This must
// only be called after InitLintList has been called on the same (or parent)
// goroutine.
func GetLintList() List {
	return lintlist.list
}
