package devops

import "fmt"

// Env is a DevOps deployment environment.
type Env string

const (
	EnvProd    Env = "prod"
	EnvStaging Env = "staging"
	EnvDev     Env = "dev"
)

// EnvValues lists the environments this CLI knows how to reach.
var EnvValues = []Env{EnvProd, EnvStaging, EnvDev}

type endpoints struct {
	backend  string
	frontend string
}

var knownEndpoints = map[Env]endpoints{
	EnvProd:    {backend: "https://prod.devops.pingcap.com", frontend: "https://ops.tidbcloud.com"},
	EnvStaging: {backend: "https://staging.devops.pingcap.com", frontend: "https://ops-staging.tidbcloud.com"},
	EnvDev:     {backend: "https://dev.devops.pingcap.com", frontend: "https://ops-dev.tidbcloud.com"},
}

// BackendURL returns the API base domain of an environment.
func BackendURL(env Env) (string, error) {
	e, ok := knownEndpoints[env]
	if !ok {
		return "", fmt.Errorf("unknown env %q, valid values: %v", env, EnvValues)
	}
	return e.backend, nil
}

// FrontendURL returns the Ops Portal base URL of an environment.
func FrontendURL(env Env) (string, error) {
	e, ok := knownEndpoints[env]
	if !ok {
		return "", fmt.Errorf("unknown env %q, valid values: %v", env, EnvValues)
	}
	return e.frontend, nil
}
