package m2mcore_test

import (
	"regexp"
	"testing"

	"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/m2m"
	"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/m2mcore"
)

func TestNewUUIDv4Format(t *testing.T) {
	pattern := regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`)
	seen := make(map[string]struct{})
	for i := 0; i < 100; i++ {
		u, err := m2mcore.NewUUIDv4()
		if err != nil {
			t.Fatal(err)
		}
		if !pattern.MatchString(u) {
			t.Errorf("UUID %q не соответствует RFC4122 v4", u)
		}
		if _, dup := seen[u]; dup {
			t.Errorf("сгенерирован дубликат %q", u)
		}
		seen[u] = struct{}{}
		// Также должен проходить XSD-валидатор НРД.
		if err := (m2m.UUID(u)).Validate(); err != nil {
			t.Errorf("UUID %q отвергнут XSD-валидатором: %v", u, err)
		}
	}
}

func TestNewReferenceID(t *testing.T) {
	at := mustParseTime(t, "2026-03-02T14:30:45Z")
	id, err := m2mcore.NewReferenceID(at)
	if err != nil {
		t.Fatal(err)
	}
	if len(id) != 16 {
		t.Errorf("ReferenceID длина %d, ожидалось 16", len(id))
	}
	if err := id.Validate(); err != nil {
		t.Errorf("ReferenceID %q отвергнут валидатором: %v", id, err)
	}
}
