package recipe

import (
	"coopcloud.tech/abra/cli/internal"
	"coopcloud.tech/abra/pkg/autocomplete"
	"coopcloud.tech/abra/pkg/log"
	"coopcloud.tech/abra/pkg/recipe"
	"github.com/go-git/go-git/v5"
	"github.com/urfave/cli"
)

var recipeResetCommand = cli.Command{
	Name:        "reset",
	Usage:       "Remove all unstaged changes from recipe config",
	Description: "WARNING: this will delete your changes. Be Careful.",
	Aliases:     []string{"rs"},
	ArgsUsage:   "<recipe>",
	Flags: []cli.Flag{
		internal.DebugFlag,
		internal.NoInputFlag,
	},
	Before:       internal.SubCommandBefore,
	BashComplete: autocomplete.RecipeNameComplete,
	Action: func(c *cli.Context) error {
		recipeName := c.Args().First()
		r := recipe.Get(recipeName)

		if recipeName != "" {
			internal.ValidateRecipe(c)
		}

		repo, err := git.PlainOpen(r.Dir)
		if err != nil {
			log.Fatal(err)
		}

		ref, err := repo.Head()
		if err != nil {
			log.Fatal(err)
		}

		worktree, err := repo.Worktree()
		if err != nil {
			log.Fatal(err)
		}

		opts := &git.ResetOptions{Commit: ref.Hash(), Mode: git.HardReset}
		if err := worktree.Reset(opts); err != nil {
			log.Fatal(err)
		}

		return nil
	},
}
