package cmd

import "fmt"

type valueSource string

const (
	valueSourceFlag    valueSource = "flag"
	valueSourceEnv     valueSource = "env"
	valueSourceProfile valueSource = "profile"
	valueSourceNone    valueSource = "none"
)

func resolveRequiredValue(flagName, flagValue, envValue, profileValue string) (string, error) {
	value := resolveValue(flagValue, envValue, profileValue)
	if value == "" {
		return "", fmt.Errorf("missing required --%s", flagName)
	}
	return value, nil
}

func resolveOptionalValue(flagValue, envValue, profileValue string) string {
	return resolveValue(flagValue, envValue, profileValue)
}

func resolveValue(flagValue, envValue, profileValue string) string {
	value, _ := resolveValueWithSource(flagValue, envValue, profileValue)
	return value
}

func resolveValueWithSource(flagValue, envValue, profileValue string) (string, valueSource) {
	if flagValue != "" {
		return flagValue, valueSourceFlag
	}
	if envValue != "" {
		return envValue, valueSourceEnv
	}
	if profileValue != "" {
		return profileValue, valueSourceProfile
	}
	return "", valueSourceNone
}
