package m2mcore

import (
	"crypto/rand"
	"fmt"
)

// NewUUIDv4 генерирует UUID v4 в каноническом формате 8-4-4-4-12. Без
// внешних зависимостей: использует crypto/rand и выставляет биты
// версии (4) и варианта (RFC 4122) согласно стандарту.
func NewUUIDv4() (string, error) {
	var b [16]byte
	if _, err := rand.Read(b[:]); err != nil {
		return "", fmt.Errorf("m2mcore: чтение crypto/rand: %w", err)
	}
	b[6] = (b[6] & 0x0F) | 0x40 // версия 4 в старших битах 7-го байта
	b[8] = (b[8] & 0x3F) | 0x80 // RFC 4122 вариант (10xx) в 9-м байте
	return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x",
		b[0:4], b[4:6], b[6:8], b[8:10], b[10:16]), nil
}
