// Copyright (c) 2017, 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:analysis_tool/tools.dart';
import 'package:path/path.dart' as path;

import 'api.dart';
import 'codegen_dart_protocol.dart';
import 'from_html.dart';
import 'implied_types.dart';

GeneratedFile target(bool responseRequiresRequestTime) =>
    new GeneratedFile('lib/protocol/protocol_common.dart',
        (String pkgPath) async {
      CodegenCommonVisitor visitor = new CodegenCommonVisitor(
          path.basename(pkgPath),
          responseRequiresRequestTime,
          readApi(pkgPath));
      return visitor.collectCode(visitor.visitApi);
    });

/**
 * A visitor that produces Dart code defining the common types associated with
 * the API.
 */
class CodegenCommonVisitor extends CodegenProtocolVisitor {
  /**
   * Initialize a newly created visitor to generate code in the package with the
   * given [packageName] corresponding to the types in the given [api] that are
   * common to multiple protocols.
   */
  CodegenCommonVisitor(
      String packageName, bool responseRequiresRequestTime, Api api)
      : super(packageName, responseRequiresRequestTime, api);

  @override
  void emitImports() {
    writeln("import 'dart:convert' hide JsonDecoder;");
    writeln();
    writeln("import 'package:analyzer/src/generated/utilities_general.dart';");
    writeln("import 'package:$packageName/protocol/protocol.dart';");
    writeln(
        "import 'package:$packageName/src/protocol/protocol_internal.dart';");
  }

  @override
  List<ImpliedType> getClassesToEmit() {
    List<ImpliedType> types = impliedTypes.values.where((ImpliedType type) {
      ApiNode node = type.apiNode;
      return node is TypeDefinition && node.isExternal;
    }).toList();
    types.sort((first, second) =>
        capitalize(first.camelName).compareTo(capitalize(second.camelName)));
    return types;
  }
}
