package validator

import (
	"fmt"
	"path"
	"strings"

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

var defaultReadBufferSize = 4096
var defaultWriteBufferSize = 4096

// ValidateServer checks a server configuration is correct.
func ValidateServer(configuration *schema.ServerConfiguration, validator *schema.StructValidator) {
	switch {
	case strings.Contains(configuration.Path, "/"):
		validator.Push(fmt.Errorf("server path must not contain any forward slashes"))
	case !utils.IsStringAlphaNumeric(configuration.Path):
		validator.Push(fmt.Errorf("server path must only be alpha numeric characters"))
	case configuration.Path == "": // Don't do anything if it's blank.
	default:
		configuration.Path = path.Clean("/" + configuration.Path)
	}

	if configuration.ReadBufferSize == 0 {
		configuration.ReadBufferSize = defaultReadBufferSize
	} else if configuration.ReadBufferSize < 0 {
		validator.Push(fmt.Errorf("server read buffer size must be above 0"))
	}

	if configuration.WriteBufferSize == 0 {
		configuration.WriteBufferSize = defaultWriteBufferSize
	} else if configuration.WriteBufferSize < 0 {
		validator.Push(fmt.Errorf("server write buffer size must be above 0"))
	}
}