package commands

import (
	"fmt"
	"log"
	"os"

	"github.com/spf13/cobra"

	"github.com/authelia/authelia/internal/configuration"
)

// ValidateConfigCmd uses the internal configuration reader to validate the configuration.
var ValidateConfigCmd = &cobra.Command{
	Use:   "validate-config [yaml]",
	Short: "Check a configuration against the internal configuration validation mechanisms.",
	Run: func(cobraCmd *cobra.Command, args []string) {
		configPath := args[0]
		if _, err := os.Stat(configPath); err != nil {
			log.Fatalf("Error Loading Configuration: %s\n", err)
		}

		// TODO: Actually use the configuration to validate some providers like Notifier
		_, errs := configuration.Read(configPath)
		if len(errs) != 0 {
			str := "Errors"
			if len(errs) == 1 {
				str = "Error"
			}
			errors := ""
			for _, err := range errs {
				errors += fmt.Sprintf("\t%s\n", err.Error())
			}
			log.Fatalf("%s occurred parsing configuration:\n%s", str, errors)
		} else {
			log.Println("Configuration parsed successfully without errors.")
		}
	},
	Args: cobra.MinimumNArgs(1),
}