package config

import (
	"flag"
	"log/slog"
	"os"

	"github.com/ncarlier/webhookd/pkg/helper"
)

// OldConfig contain global configuration
type OldConfig struct {
	NbWorkers int    `flag:"nb-workers" desc:"Number of workers to start [DEPRECATED]" default:"2"`
	Scripts   string `flag:"scripts" desc:"Scripts location [DEPRECATED]" default:"scripts"`
}

// ManageDeprecatedFlags manage legacy configuration
func (c *Config) ManageDeprecatedFlags(prefix string) {
	if isUsingDeprecatedConfigParam(prefix, "nb-workers") {
		c.Hook.Workers = c.NbWorkers
	}
	if isUsingDeprecatedConfigParam(prefix, "scripts") {
		c.Hook.ScriptsDir = c.Scripts
	}
}

func isUsingDeprecatedConfigParam(prefix, flagName string) bool {
	envVar := helper.ToScreamingSnake(prefix + "_" + flagName)
	switch {
	case isFlagPassed(flagName):
		slog.Warn("using deprecated configuration flag", "flag", flagName)
		return true
	case isEnvExists(envVar):
		slog.Warn("using deprecated configuration environment variable", "variable", envVar)
		return true
	default:
		return false
	}
}

func isEnvExists(name string) bool {
	_, exists := os.LookupEnv(name)
	return exists
}

func isFlagPassed(name string) bool {
	found := false
	flag.Visit(func(f *flag.Flag) {
		if f.Name == name {
			found = true
		}
	})
	return found
}