package uuid

import (
	"github.com/google/uuid"
)

// Generator provides methods to generate UUIDs consistently across the application
type Generator struct{}

// NewGenerator creates a new UUID generator instance
func NewGenerator() *Generator {
	return &Generator{}
}

// NewString generates a new UUID and returns it as a string
func (g *Generator) NewString() string {
	return uuid.New().String()
}

// NewStringShort generates a new UUID and returns the first 8 characters as a string
// This is useful for creating shorter identifiers for testing or display purposes
func (g *Generator) NewStringShort() string {
	return uuid.New().String()[:8]
}

// New generates a new UUID and returns the UUID object
func (g *Generator) New() uuid.UUID {
	return uuid.New()
}

// Default generator instance for convenient access
var defaultGenerator = NewGenerator()

// NewString generates a new UUID string using the default generator
func NewString() string {
	return defaultGenerator.NewString()
}

// NewStringShort generates a new short UUID string using the default generator
func NewStringShort() string {
	return defaultGenerator.NewStringShort()
}

// New generates a new UUID using the default generator
func New() uuid.UUID {
	return defaultGenerator.New()
}
