// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package config // import "miniflux.app/v2/internal/config"

import (
	"fmt"
	"slices"
	"strconv"
	"strings"
)

func validateChoices(rawValue string, choices []string) error {
	if !slices.Contains(choices, rawValue) {
		return fmt.Errorf("value must be one of: %v", strings.Join(choices, ", "))
	}
	return nil
}

func validateListChoices(inputValues, choices []string) error {
	for _, value := range inputValues {
		if !slices.Contains(choices, value) {
			return fmt.Errorf("value must be one of: %v", strings.Join(choices, ", "))
		}
	}
	return nil
}

func validateGreaterThan(rawValue string, min int) error {
	intValue, err := strconv.Atoi(rawValue)
	if err != nil {
		return fmt.Errorf("value must be an integer")
	}
	if intValue > min {
		return nil
	}
	return fmt.Errorf("value must be at least %d", min)
}

func validateGreaterOrEqualThan(rawValue string, min int) error {
	intValue, err := strconv.Atoi(rawValue)
	if err != nil {
		return fmt.Errorf("value must be an integer")
	}
	if intValue >= min {
		return nil
	}
	return fmt.Errorf("value must be greater or equal than %d", min)
}

func validateRange(rawValue string, min, max int) error {
	intValue, err := strconv.Atoi(rawValue)
	if err != nil {
		return fmt.Errorf("value must be an integer")
	}
	if intValue < min || intValue > max {
		return fmt.Errorf("value must be between %d and %d", min, max)
	}
	return nil
}
