// 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.

import 'package:analyzer/analysis_rule/rule_context.dart';
import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/utilities/extensions/uri.dart';

import '../analyzer.dart';

const _desc = r"Don't import implementation files from another package.";

class ImplementationImports extends LintRule {
  ImplementationImports()
    : super(name: LintNames.implementation_imports, description: _desc);

  @override
  DiagnosticCode get diagnosticCode => LinterLintCode.implementation_imports;

  @override
  void registerNodeProcessors(
    RuleVisitorRegistry registry,
    RuleContext context,
  ) {
    var libraryUri = context.libraryElement?.uri;
    if (libraryUri == null) return;

    // If the source URI is not a `package` URI, bail out.
    if (libraryUri.scheme != 'package') return;

    var visitor = _Visitor(this, libraryUri);
    registry.addImportDirective(this, visitor);
  }
}

class _Visitor extends SimpleAstVisitor<void> {
  final LintRule rule;
  final Uri sourceUri;

  _Visitor(this.rule, this.sourceUri);

  @override
  void visitImportDirective(ImportDirective node) {
    if (node.libraryImport?.uri case DirectiveUriWithSource importedLibrary) {
      var importUri = importedLibrary.source.uri;

      // Test for 'package:*/src/'.
      if (!importUri.isImplementation) return;

      if (!importUri.isSamePackageAs(sourceUri)) {
        rule.reportAtNode(node.uri);
      }
    }
  }
}
