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

import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/instrumentation/service.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';

/// The implementation of [DartAssistContext].
class DartAssistContextImpl implements DartAssistContext {
  @override
  final InstrumentationService instrumentationService;

  @override
  final ChangeWorkspace workspace;

  @override
  final ResolvedUnitResult resolveResult;

  @override
  final int selectionOffset;

  @override
  final int selectionLength;

  DartAssistContextImpl(this.instrumentationService, this.workspace,
      this.resolveResult, this.selectionOffset, this.selectionLength);
}

/// An enumeration of possible assist kinds.
class DartAssistKind {
  static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = AssistKind(
      'dart.assist.add.diagnosticPropertyReference',
      30,
      'Add a debug reference to this property');
  static const ADD_NOT_NULL_ASSERT = AssistKind(
      'dart.assist.add.notNullAssert', 30, 'Add a not-null assertion');
  static const ADD_RETURN_TYPE =
      AssistKind('dart.assist.add.returnType', 30, 'Add return type');
  static const ADD_TYPE_ANNOTATION =
      AssistKind('dart.assist.add.typeAnnotation', 30, 'Add type annotation');
  static const ASSIGN_TO_LOCAL_VARIABLE = AssistKind(
      'dart.assist.assignToVariable', 30, 'Assign value to new local variable');
  static const CONVERT_CLASS_TO_MIXIN = AssistKind(
      'dart.assist.convert.classToMixin', 30, 'Convert class to a mixin');
  static const CONVERT_DOCUMENTATION_INTO_BLOCK = AssistKind(
      'dart.assist.convert.blockComment',
      30,
      'Convert to block documentation comment');
  static const CONVERT_DOCUMENTATION_INTO_LINE = AssistKind(
      'dart.assist.convert.lineComment',
      30,
      'Convert to line documentation comment');
  static const CONVERT_INTO_ASYNC_BODY = AssistKind(
      'dart.assist.convert.bodyToAsync', 29, 'Convert to async function body');
  static const CONVERT_INTO_BLOCK_BODY = AssistKind(
      'dart.assist.convert.bodyToBlock', 30, 'Convert to block body');
  static const CONVERT_INTO_EXPRESSION_BODY = AssistKind(
      'dart.assist.convert.bodyToExpression', 30, 'Convert to expression body');
  static const CONVERT_INTO_FINAL_FIELD = AssistKind(
      'dart.assist.convert.getterToFinalField', 30, 'Convert to final field');
  static const CONVERT_INTO_FOR_INDEX = AssistKind(
      'dart.assist.convert.forEachToForIndex', 30, 'Convert to for-index loop');
  static const CONVERT_INTO_GENERIC_FUNCTION_SYNTAX = AssistKind(
      'dart.assist.convert.toGenericFunctionSyntax',
      30,
      "Convert into 'Function' syntax");
  static const CONVERT_INTO_GETTER = AssistKind(
      'dart.assist.convert.finalFieldToGetter', 30, 'Convert to getter');
  static const CONVERT_INTO_IS_NOT =
      AssistKind('dart.assist.convert.isNot', 30, 'Convert to is!');
  static const CONVERT_INTO_IS_NOT_EMPTY = AssistKind(
      'dart.assist.convert.isNotEmpty', 30, "Convert to 'isNotEmpty'");
  static const CONVERT_PART_OF_TO_URI = AssistKind(
      'dart.assist.convert.partOfToPartUri', 30, 'Convert to use a URI');
  static const CONVERT_TO_DOUBLE_QUOTED_STRING = AssistKind(
      'dart.assist.convert.toDoubleQuotedString',
      30,
      'Convert to double quoted string');
  static const CONVERT_TO_FIELD_PARAMETER = AssistKind(
      'dart.assist.convert.toConstructorFieldParameter',
      30,
      'Convert to field formal parameter');
  static const CONVERT_TO_FOR_ELEMENT = AssistKind(
      'dart.assist.convert.toForElement', 30, "Convert to a 'for' element");
  static const CONVERT_TO_IF_ELEMENT = AssistKind(
      'dart.assist.convert.toIfElement', 30, "Convert to an 'if' element");
  static const CONVERT_TO_INT_LITERAL = AssistKind(
      'dart.assist.convert.toIntLiteral', 30, 'Convert to an int literal');
  static const CONVERT_TO_LIST_LITERAL = AssistKind(
      'dart.assist.convert.toListLiteral', 30, 'Convert to list literal');
  static const CONVERT_TO_MAP_LITERAL = AssistKind(
      'dart.assist.convert.toMapLiteral', 30, 'Convert to map literal');
  static const CONVERT_TO_MULTILINE_STRING = AssistKind(
      'dart.assist.convert.toMultilineString',
      30,
      'Convert to multiline string');
  static const CONVERT_TO_NORMAL_PARAMETER = AssistKind(
      'dart.assist.convert.toConstructorNormalParameter',
      30,
      'Convert to normal parameter');
  static const CONVERT_TO_NULL_AWARE =
      AssistKind('dart.assist.convert.toNullAware', 30, "Convert to use '?.'");
  static const CONVERT_TO_PACKAGE_IMPORT = AssistKind(
      'dart.assist.convert.relativeToPackageImport',
      30,
      "Convert to 'package:' import");
  static const CONVERT_TO_RELATIVE_IMPORT = AssistKind(
      'dart.assist.convert.packageToRelativeImport',
      30,
      'Convert to a relative import');
  static const CONVERT_TO_SET_LITERAL = AssistKind(
      'dart.assist.convert.toSetLiteral', 30, 'Convert to set literal');
  static const CONVERT_TO_SINGLE_QUOTED_STRING = AssistKind(
      'dart.assist.convert.toSingleQuotedString',
      30,
      'Convert to single quoted string');
  static const CONVERT_TO_SPREAD =
      AssistKind('dart.assist.convert.toSpread', 30, 'Convert to a spread');
  static const ENCAPSULATE_FIELD =
      AssistKind('dart.assist.encapsulateField', 30, 'Encapsulate field');
  static const EXCHANGE_OPERANDS =
      AssistKind('dart.assist.exchangeOperands', 30, 'Exchange operands');

  // Flutter assists
  static const FLUTTER_CONVERT_TO_CHILDREN = AssistKind(
      'dart.assist.flutter.convert.childToChildren',
      30,
      'Convert to children:');
  static const FLUTTER_CONVERT_TO_STATEFUL_WIDGET = AssistKind(
      'dart.assist.flutter.convert.toStatefulWidget',
      30,
      'Convert to StatefulWidget');

  // Flutter wrap specific assists
  static const FLUTTER_WRAP_GENERIC =
      AssistKind('dart.assist.flutter.wrap.generic', 31, 'Wrap with widget...');

  static const FLUTTER_WRAP_CENTER =
      AssistKind('dart.assist.flutter.wrap.center', 32, 'Wrap with Center');
  static const FLUTTER_WRAP_COLUMN =
      AssistKind('dart.assist.flutter.wrap.column', 32, 'Wrap with Column');
  static const FLUTTER_WRAP_CONTAINER = AssistKind(
      'dart.assist.flutter.wrap.container', 32, 'Wrap with Container');
  static const FLUTTER_WRAP_PADDING =
      AssistKind('dart.assist.flutter.wrap.padding', 32, 'Wrap with Padding');
  static const FLUTTER_WRAP_ROW =
      AssistKind('dart.assist.flutter.wrap.row', 32, 'Wrap with Row');
  static const FLUTTER_WRAP_SIZED_BOX =
      AssistKind('dart.assist.flutter.wrap.sizedBox', 32, 'Wrap with SizedBox');
  static const FLUTTER_WRAP_STREAM_BUILDER = AssistKind(
      'dart.assist.flutter.wrap.streamBuilder', 32, 'Wrap with StreamBuilder');

  // Flutter re-order assists
  static const FLUTTER_SWAP_WITH_CHILD =
      AssistKind('dart.assist.flutter.swap.withChild', 33, 'Swap with child');
  static const FLUTTER_SWAP_WITH_PARENT =
      AssistKind('dart.assist.flutter.swap.withParent', 33, 'Swap with parent');
  static const FLUTTER_MOVE_DOWN =
      AssistKind('dart.assist.flutter.move.down', 34, 'Move widget down');
  static const FLUTTER_MOVE_UP =
      AssistKind('dart.assist.flutter.move.up', 34, 'Move widget up');

  // Flutter remove assist
  static const FLUTTER_REMOVE_WIDGET =
      AssistKind('dart.assist.flutter.removeWidget', 35, 'Remove this widget');

  static const IMPORT_ADD_SHOW = AssistKind(
      'dart.assist.add.showCombinator', 30, "Add explicit 'show' combinator");
  static const INLINE_INVOCATION =
      AssistKind('dart.assist.inline', 30, "Inline invocation of '{0}'");
  static const INTRODUCE_LOCAL_CAST_TYPE = AssistKind(
      'dart.assist.introduceLocalCast',
      30,
      'Introduce new local with tested type');
  static const INVERT_IF_STATEMENT =
      AssistKind('dart.assist.invertIf', 30, "Invert 'if' statement");
  static const JOIN_IF_WITH_INNER = AssistKind('dart.assist.joinWithInnerIf',
      30, "Join 'if' statement with inner 'if' statement");
  static const JOIN_IF_WITH_OUTER = AssistKind('dart.assist.joinWithOuterIf',
      30, "Join 'if' statement with outer 'if' statement");
  static const JOIN_VARIABLE_DECLARATION = AssistKind(
      'dart.assist.joinVariableDeclaration', 30, 'Join variable declaration');
  static const REMOVE_TYPE_ANNOTATION = AssistKind(
      // todo (pq): unify w/ fix
      'dart.assist.remove.typeAnnotation',
      29,
      'Remove type annotation');
  static const REPLACE_CONDITIONAL_WITH_IF_ELSE = AssistKind(
      'dart.assist.convert.conditionalToIfElse',
      30,
      "Replace conditional with 'if-else'");
  static const REPLACE_IF_ELSE_WITH_CONDITIONAL = AssistKind(
      'dart.assist.convert.ifElseToConditional',
      30,
      "Replace 'if-else' with conditional ('c ? x : y')");
  static const REPLACE_WITH_VAR = AssistKind(
      'dart.assist.replace.withVar', 30, "Replace type annotation with 'var'");
  static const SHADOW_FIELD = AssistKind('dart.assist.shadowField', 30,
      'Create a local variable that shadows the field');
  static const SORT_CHILD_PROPERTY_LAST = AssistKind(
      'dart.assist.sort.child.properties.last',
      30,
      'Move child property to end of arguments');
  static const SPLIT_AND_CONDITION =
      AssistKind('dart.assist.splitIfConjunction', 30, 'Split && condition');
  static const SPLIT_VARIABLE_DECLARATION = AssistKind(
      'dart.assist.splitVariableDeclaration', 30, 'Split variable declaration');
  static const SURROUND_WITH_BLOCK =
      AssistKind('dart.assist.surround.block', 22, 'Surround with block');
  static const SURROUND_WITH_DO_WHILE = AssistKind(
      'dart.assist.surround.doWhile', 27, "Surround with 'do-while'");
  static const SURROUND_WITH_FOR =
      AssistKind('dart.assist.surround.forEach', 26, "Surround with 'for'");
  static const SURROUND_WITH_FOR_IN =
      AssistKind('dart.assist.surround.forIn', 25, "Surround with 'for-in'");
  static const SURROUND_WITH_IF =
      AssistKind('dart.assist.surround.if', 23, "Surround with 'if'");
  static const SURROUND_WITH_SET_STATE = AssistKind(
      'dart.assist.surround.setState', 27, "Surround with 'setState'");
  static const SURROUND_WITH_TRY_CATCH = AssistKind(
      'dart.assist.surround.tryCatch', 28, "Surround with 'try-catch'");
  static const SURROUND_WITH_TRY_FINALLY = AssistKind(
      'dart.assist.surround.tryFinally', 29, "Surround with 'try-finally'");
  static const SURROUND_WITH_WHILE =
      AssistKind('dart.assist.surround.while', 24, "Surround with 'while'");
  static const USE_CURLY_BRACES =
      AssistKind('dart.assist.surround.curlyBraces', 30, 'Use curly braces');
}
