// Copyright The Monogon Project Authors.
// SPDX-License-Identifier: Apache-2.0

package toolbase

import (
	"fmt"
	"os"
	"path"
)

// isWorkspace returns whether a given string is a valid path pointing to a
// Bazel workspace directory.
func isWorkspace(dir string) bool {
	w := path.Join(dir, "WORKSPACE")
	if _, err := os.Stat(w); err == nil {
		return true
	}
	return false
}

// WorkspaceDirectory returns the workspace directory from which a given
// command line tool is running. This handles the following cases:
//
//  1. The command line tool was invoked via `bazel run`.
//  2. The command line tool was started directly in a workspace directory (but
//     not a subdirectory).
//
// If the workspace directory path cannot be inferred based on the above
// assumptions, an error is returned.
func WorkspaceDirectory() (string, error) {
	if p := os.Getenv("BUILD_WORKSPACE_DIRECTORY"); p != "" && isWorkspace(p) {
		return p, nil
	}

	if p, err := os.Getwd(); err == nil && isWorkspace(p) {
		return p, nil
	}

	return "", fmt.Errorf("not invoked from `bazel run` and not running in workspace directory")
}
