package kanban

import (
	"regexp"

	"github.com/asaskevich/govalidator"
)

// ValidationService defines validation methods for kanban operations
type ValidationService interface {
	IsValidHexColor(hexColor string) bool
}

// validationService implements the ValidationService interface
type validationService struct {
	hexColorRegex *regexp.Regexp
}

// NewValidationService creates a new validation service
func NewValidationService() ValidationService {
	// Compile the hex color regex pattern (supports #RGB, #RRGGBB, #RRGGBBAA)
	hexColorRegex := regexp.MustCompile(`^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$`)

	// Register custom validator with govalidator
	govalidator.CustomTypeTagMap.Set("hexcolor", govalidator.CustomTypeValidator(func(i interface{}, o interface{}) bool {
		hexColor, ok := i.(string)
		if !ok {
			return false
		}
		return hexColorRegex.MatchString(hexColor)
	}))

	return &validationService{
		hexColorRegex: hexColorRegex,
	}
}

// IsValidHexColor checks if a string is a valid hex color code
func (v *validationService) IsValidHexColor(hexColor string) bool {
	return v.hexColorRegex.MatchString(hexColor)
}
