package rackspace

import (
	"fmt"
	"os"

	"github.com/rackspace/gophercloud"
)

var nilOptions = gophercloud.AuthOptions{}

// ErrNoAuthUrl, ErrNoUsername, and ErrNoPassword errors indicate of the
// required RAX_AUTH_URL, RAX_USERNAME, or RAX_PASSWORD environment variables,
// respectively, remain undefined.  See the AuthOptions() function for more details.
var (
	ErrNoAuthURL  = fmt.Errorf("Environment variable RAX_AUTH_URL needs to be set.")
	ErrNoUsername = fmt.Errorf("Environment variable RAX_USERNAME needs to be set.")
	ErrNoPassword = fmt.Errorf("Environment variable RAX_API_KEY or RAX_PASSWORD needs to be set.")
)

// AuthOptionsFromEnv fills out an identity.AuthOptions structure with the
// settings found on the various Rackspace RAX_* environment variables.
func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) {
	authURL := os.Getenv("RAX_AUTH_URL")
	username := os.Getenv("RAX_USERNAME")
	password := os.Getenv("RAX_PASSWORD")
	apiKey := os.Getenv("RAX_API_KEY")

	if authURL == "" {
		return nilOptions, ErrNoAuthURL
	}

	if username == "" {
		return nilOptions, ErrNoUsername
	}

	if password == "" && apiKey == "" {
		return nilOptions, ErrNoPassword
	}

	ao := gophercloud.AuthOptions{
		IdentityEndpoint: authURL,
		Username:         username,
		Password:         password,
		APIKey:           apiKey,
	}

	return ao, nil
}
