# Uuid.timeBasedUuid constructor

Uuid.timeBasedUuid()

Generates a time-based UUID (version 1).

Returns:

- A new time-based UUID with version 1 and variant 2 (RFC 4122)

## Time-Based Properties

- Incorporates current timestamp with 100-nanosecond precision
- Includes clock sequence to handle clock adjustments
- Uses random node identifier (no MAC address exposure)
- Sortable by generation time

## Privacy Considerations

This implementation uses a random node identifier instead of the actual MAC address to protect privacy while maintaining UUID uniqueness.

## Example

    final uuid1 = Uuid.timeBasedUuid();
    await Future.delayed(Duration(milliseconds: 1));
    final uuid2 = Uuid.timeBasedUuid();
    print(uuid1.compareTo(uuid2) < 0); // true (uuid1 generated first)
    print(uuid1.version); // 1

## Implementation

    factory Uuid.timeBasedUuid() {
      // Get current time in 100-nanosecond intervals since UUID epoch
      final now = DateTime.now().millisecondsSinceEpoch;
      final uuidEpoch = DateTime(1582, 10, 15).millisecondsSinceEpoch;
      final timestamp = BigInteger.fromInt(now - uuidEpoch) * BigInteger.fromInt(10000); // 100ns intervals

      // Generate 14-bit clock sequence
      final clockSeq = BigInteger.fromInt(_secureRandom.nextInt(0x4000));

      // Generate 48-bit node ID from secure random bytes
      BigInteger node = BigInteger.ZERO;
      for (var i = 0; i < 6; i++) {
        node = (node << 8) | BigInteger.fromInt(_secureRandom.nextInt(256));
      }

      // Build UUID components
      final timeLow = timestamp & BigInteger.fromInt(0xFFFFFFFF);
      final timeMid = (timestamp >> 32) & BigInteger.fromInt(0xFFFF);
      final timeHiAndVersion = ((timestamp >> 48) & BigInteger.fromInt(0x0FFF)) | BigInteger.fromInt(0x1000); // v1
      final clockSeqHiAndReserved = ((clockSeq >> 8) | BigInteger.fromInt(0x80)) & BigInteger.fromInt(0xFF); // variant 2
      final clockSeqLow = clockSeq & BigInteger.fromInt(0xFF);

      final mostSigBits = (timeLow << 32) | (timeMid << 16) | timeHiAndVersion;
      final leastSigBits = (clockSeqHiAndReserved << 56) | (clockSeqLow << 48) | node;

      return Uuid._(mostSigBits, leastSigBits);
    }