package bookmarks

import (
	"os"

	"github.com/sosedoff/pgweb/pkg/command"
	"github.com/sosedoff/pgweb/pkg/shared"
)

// Bookmark contains information about bookmarked database connection
type Bookmark struct {
	ID          string          // ID generated from the filename
	URL         string          // Postgres connection URL
	Host        string          // Server hostname
	Port        int             // Server port
	User        string          // Database user
	UserVar     string          // Database user environment variable
	Password    string          // User password
	PasswordVar string          // User password environment variable
	Database    string          // Database name
	SSLMode     string          // Connection SSL mode
	SSH         *shared.SSHInfo // SSH tunnel config
	ReadOnly    bool            // Enable read-only transaction mode
}

// SSHInfoIsEmpty returns true if ssh configuration is not provided
func (b Bookmark) SSHInfoIsEmpty() bool {
	return b.SSH == nil || b.SSH.User == "" && b.SSH.Host == "" && b.SSH.Port == ""
}

// ConvertToOptions returns an options struct from connection details
func (b Bookmark) ConvertToOptions() command.Options {
	user := b.User
	if b.User == "" {
		user = os.Getenv(b.UserVar)
	}

	pass := b.Password
	if b.Password == "" {
		pass = os.Getenv(b.PasswordVar)
	}

	return command.Options{
		URL:      b.URL,
		Host:     b.Host,
		Port:     b.Port,
		User:     user,
		Pass:     pass,
		DbName:   b.Database,
		SSLMode:  b.SSLMode,
		ReadOnly: b.ReadOnly,
	}
}
