/// UUID Version 4 (Random) implementation

///|
/// Generate a random UUID (version 4)
/// Uses random or pseudo-random numbers for all bits except version and variant
pub fn v4() -> Uuid {
  // Generate 16 random bytes
  let bytes = random_bytes(16)

  // Set version and variant bits according to RFC 9562
  set_variant_and_version(bytes, Version::V4)
  Uuid::new(bytes)
}

///|
/// Generate a random UUID using a specific random number generator
pub fn v4_with_rng(rng : SimpleRng) -> Uuid {
  let bytes : FixedArray[Byte] = FixedArray::make(16, b'\x00')
  rng.fill_bytes(bytes)

  // Set version and variant bits according to RFC 9562
  set_variant_and_version(bytes, Version::V4)
  Uuid::new(bytes)
}

///|
/// Generate multiple random UUIDs
pub fn v4_bulk(count : Int) -> Array[Uuid] {
  let result : Array[Uuid] = []
  for i = 0; i < count; i = i + 1 {
    result.push(v4())
  }
  result
}