package internal

// Accountant decribes something that stores accounts and account values
type Accountant interface {
	// RegisterAccount will register a new account and return it's info
	RegisterAccount(name string) (acc Account, err error)

	// AssignData stores a custom account key value pair
	AssignData(account string, key string, value string) error

	// GetValue returns custom account data for a specific key
	GetValue(account string, key string) (string, error)

	// VerifySecret will verify whether the account secret matches with the
	VerifySecret(account string, secret string) (bool, error)

	// GetSecret gets the secret associated with an account
	GetSecret(account string) (string, error)
}

// Account represents a registered user
type Account struct {
	// Name simply describes the account and must be unique
	Name string

	// Data represents internal account data
	Data map[string]string
}