package init

import (
	"fmt"

	"github.com/databricks/bricks/cmd/prompt"
	"github.com/databricks/bricks/project"
	"github.com/mitchellh/go-homedir"
	"gopkg.in/ini.v1"
)

func loadCliProfiles() (profiles []prompt.Answer, err error) {
	file, err := homedir.Expand("~/.databrickscfg")
	if err != nil {
		return
	}
	gitConfig, err := ini.Load(file)
	if err != nil {
		return
	}
	for _, v := range gitConfig.Sections() {
		host, err := v.GetKey("host")
		if err != nil {
			// invalid profile
			continue
		}
		// TODO: verify these tokens to work, becaus they may be expired
		profiles = append(profiles, prompt.Answer{
			Value:   v.Name(),
			Details: fmt.Sprintf(`Connecting to "%s" workspace`, host),
			Callback: func(ans prompt.Answer, config *project.Config, _ prompt.Results) {
				if config.Environments == nil {
					config.Environments = make(map[string]project.Environment)
				}
				config.Environments[project.DefaultEnvironment] = project.Environment{
					Workspace: project.Workspace{
						Profile: ans.Value,
					},
				}
			},
		})
	}
	return
}

func getConnectionProfile() (*prompt.Choice, error) {
	profiles, err := loadCliProfiles()
	if err != nil {
		return nil, err
	}
	// TODO: propmt for password and create ~/.databrickscfg
	return &prompt.Choice{
		Key:     "profile",
		Label:   "Databricks CLI profile",
		Answers: profiles,
	}, err
}