// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package worker

import (
	"errors"

	"golang.org/x/vuln/internal/worker/store"
)

// serviceID names the Cloud Run service.
const serviceID = "vuln-worker"

// Config holds configuration information for the worker server.
type Config struct {
	// Project is the Google Cloud Project where the resources live.
	Project string

	// Namespace is the Firstore namespace to use.
	Namespace string

	// UseErrorReporting determines whether errors go to the Error Reporting API.
	UseErrorReporting bool

	// IssueRepo is the GitHub repo to use for issues.
	// An empty string disables issue creation.
	IssueRepo string

	// GitHubAccessToken is the token needed to authorize to the GitHub API.
	GitHubAccessToken string

	// Store is the implementation of store.Store used by the server.
	Store store.Store
}

func (c *Config) Validate() error {
	if c.Project == "" {
		return errors.New("missing project")
	}
	if c.Namespace == "" {
		return errors.New("missing namespace")
	}
	if c.IssueRepo != "" && c.GitHubAccessToken == "" {
		return errors.New("issue repo requires access token")
	}
	return nil
}
