// Copyright (c) 2012, 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 pub.validator.lib;

import 'dart:async' hide TimeoutException;

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

import '../entrypoint.dart';
import '../io.dart';
import '../validator.dart';

// TODO(nweiz): When issue 7196 is fixed, complain about non-Dart files in lib.
/// A validator that checks that libraries in "lib/" (and not "lib/src/") exist
/// and are well-formed.
class LibValidator extends Validator {
  LibValidator(Entrypoint entrypoint)
    : super(entrypoint);

  Future validate() {
    return new Future.sync(() {
      var libDir = path.join(entrypoint.root.dir, "lib");

      if (!dirExists(libDir)) {
        errors.add('You must have a "lib" directory.\n'
            "Without that, users cannot import any code from your package.");
        return;
      }

      var files = listDir(libDir)
          .map((file) => path.relative(file, from: libDir))
          .toList();
      if (files.isEmpty) {
        errors.add('You must have a non-empty "lib" directory.\n'
            "Without that, users cannot import any code from your package.");
      } else if (files.length == 1 && files.first == "src") {
        errors.add('The "lib" directory must contain something other than '
            '"src".\n'
            "Otherwise, users cannot import any code from your package.");
      }
    });
  }
}
