package logs

import (
	"errors"
	"fmt"
	"strconv"
)

func validateSetValue(appName string, key string, value string) error {
	if key == "max-size" {
		return validateMaxSize(appName, value)
	}

	if key == "vector-sink" {
		return validateVectorSink(appName, value)
	}

	return nil
}

func validateMaxSize(appName string, value string) error {
	if value == "" {
		return nil
	}

	if value == "unlimited" {
		return nil
	}

	last := value[len(value)-1:]
	if last != "k" && last != "m" && last != "g" {
		return errors.New("Invalid max-size unit measure, value must end in any of [k, m, g]")
	}

	if len(value) < 2 {
		return errors.New("Invalid max-size value, must be a number followed by a unit of measure [k, m, g]")
	}

	number := value[:len(value)-1]
	if _, err := strconv.Atoi(number); err != nil {
		return fmt.Errorf("Invalid max-size value, unable to convert number to int: %s", err.Error())
	}

	return nil
}

func validateVectorSink(appName string, value string) error {
	if value == "" {
		return nil
	}

	_, err := SinkValueToConfig(appName, value)
	if err != nil {
		return err
	}

	return nil
}
