package internal

import (
	"errors"

	"coopcloud.tech/abra/pkg/app"
	"coopcloud.tech/abra/pkg/config"
	"coopcloud.tech/abra/pkg/recipe"
	"github.com/sirupsen/logrus"
	"github.com/urfave/cli/v2"
)

// ValidateRecipe ensures the recipe arg is valid.
func ValidateRecipe(c *cli.Context) recipe.Recipe {
	recipeName := c.Args().First()

	if recipeName == "" {
		ShowSubcommandHelpAndError(c, errors.New("no recipe provided"))
	}

	recipe, err := recipe.Get(recipeName)
	if err != nil {
		logrus.Fatal(err)
	}

	logrus.Debugf("validated '%s' as recipe argument", recipeName)

	return recipe
}

// ValidateApp ensures the app name arg is valid.
func ValidateApp(c *cli.Context) config.App {
	appName := c.Args().First()

	if appName == "" {
		ShowSubcommandHelpAndError(c, errors.New("no app provided"))
	}

	app, err := app.Get(appName)
	if err != nil {
		logrus.Fatal(err)
	}

	logrus.Debugf("validated '%s' as app argument", appName)

	return app
}

// ValidateDomain ensures the domain name arg is valid.
func ValidateDomain(c *cli.Context) string {
	domainName := c.Args().First()

	if domainName == "" {
		ShowSubcommandHelpAndError(c, errors.New("no domain provided"))
	}

	logrus.Debugf("validated '%s' as domain argument", domainName)

	return domainName
}