// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/**
 * A UUID generator library.
 */
library usage.uuid;

import 'dart:math' show Random;

/**
 * A UUID generator. This will generate unique IDs in the format:
 *
 *     f47ac10b-58cc-4372-a567-0e02b2c3d479
 *
 * The generated uuids are 128 bit numbers encoded in a specific string format.
 *
 * For more information, see
 * http://en.wikipedia.org/wiki/Universally_unique_identifier.
 */
class Uuid {
  Random _random = new Random();

  /**
   * Generate a version 4 (random) uuid. This is a uuid scheme that only uses
   * random numbers as the source of the generated uuid.
   */
  String generateV4() {
    // Generate xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx / 8-4-4-4-12.
    int special = 8 + _random.nextInt(4);

    return
        '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-'
        '${_bitsDigits(16, 4)}-'
        '4${_bitsDigits(12, 3)}-'
        '${_printDigits(special,  1)}${_bitsDigits(12, 3)}-'
        '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}';
  }

  String _bitsDigits(int bitCount, int digitCount) =>
      _printDigits(_generateBits(bitCount), digitCount);

  int _generateBits(int bitCount) => _random.nextInt(1 << bitCount);

  String _printDigits(int value, int count) =>
      value.toRadixString(16).padLeft(count, '0');
}
