package demo

import (
	"github.com/jesseduffield/lazygit/pkg/config"
	. "github.com/jesseduffield/lazygit/pkg/integration/components"
)

var customCommandContent = `
customCommands:
  - key: 'a'
    command: 'git checkout {{.Form.Branch}}'
    context: 'localBranches'
    prompts:
    - type: 'input'
      title: 'Enter a branch name to checkout:'
      key: 'Branch'
			suggestions:
				preset: 'branches'
`

var CustomCommand = NewIntegrationTest(NewIntegrationTestArgs{
	Description:  "Invoke a custom command",
	ExtraCmdArgs: []string{},
	Skip:         false,
	IsDemo:       true,
	SetupConfig: func(cfg *config.AppConfig) {
		setDefaultDemoConfig(cfg)

		cfg.GetUserConfig().CustomCommands = []config.CustomCommand{
			{
				Key:     config.Keybinding{"a"},
				Context: "localBranches",
				Command: `git checkout {{.Form.Branch}}`,
				Prompts: []config.CustomCommandPrompt{
					{
						Key:   "Branch",
						Type:  "input",
						Title: "Enter a branch name to checkout",
						Suggestions: config.CustomCommandSuggestions{
							Preset: "branches",
						},
					},
				},
			},
		}
	},
	SetupRepo: func(shell *Shell) {
		shell.CreateNCommitsWithRandomMessages(30)
		shell.NewBranch("feature/user-authentication")
		shell.NewBranch("feature/payment-processing")
		shell.NewBranch("feature/search-functionality")
		shell.NewBranch("feature/mobile-responsive")
		shell.EmptyCommit("Make mobile response")
		shell.NewBranch("bugfix/fix-login-issue")
		shell.HardReset("HEAD~1")
		shell.NewBranch("bugfix/fix-crash-bug")
		shell.CreateFile("custom_commands_example.yml", customCommandContent)
	},
	Run: func(t *TestDriver, keys config.KeybindingConfig) {
		t.SetCaptionPrefix("Invoke a custom command")
		t.Wait(1500)

		t.Views().Branches().
			Focus().
			Wait(500).
			Press(config.Keybinding{"a"}).
			Tap(func() {
				t.Wait(500)

				t.ExpectPopup().Prompt().
					Title(Equals("Enter a branch name to checkout")).
					Type("mobile").
					ConfirmFirstSuggestion()
			})
	},
})
