// Copyright (c) 2015, 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.
library web_components.src.normalizePath;

import 'package:path/path.dart' as path;

String normalizeHtmlImportPath(
    String filePath, String dartFilePackage, String dartFilePath) {
  // If they already supplied a packages path, just return that.
  if (filePath.startsWith('package:')) {
    return filePath.replaceFirst('package:', 'packages/');
  }

  var dartFileDir = path.url.dirname(dartFilePath);
  var segments = path.url.split(dartFileDir);
  // The dartFileDir without the leading dir (web, lib, test, etc).
  var dartFileSubDir = path.url.joinAll(segments.getRange(1, segments.length));

  // Relative paths have no package supplied.
  if (dartFilePackage == null) {
    return path.url.normalize(path.url.join(dartFileSubDir, filePath));
  }

  // Only option left is a packages/ path.
  return path.url.normalize(
      path.url.join('packages/', dartFilePackage, dartFileSubDir, filePath));
}
