// 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_ENUM = AssistKind(
    'dart.assist.convert.classToEnum',
    30,
    'Convert class to an enum',
  );
  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',
    31,
    '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 CONVERT_TO_SUPER_INITIALIZING_PARAMETER = AssistKind(
    'dart.assist.convert.toSuperInitializingParameter',
    30,
    'Convert to a super initializing parameter',
  );
  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',
    29,
    'Wrap with widget...',
  );

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

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

  // Flutter remove assist
  static const FLUTTER_REMOVE_WIDGET = AssistKind(
    'dart.assist.flutter.removeWidget',
    25,
    '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',
    31,
    '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',
    38,
    'Surround with block',
  );
  static const SURROUND_WITH_DO_WHILE = AssistKind(
    'dart.assist.surround.doWhile',
    33,
    "Surround with 'do-while'",
  );
  static const SURROUND_WITH_FOR = AssistKind(
    'dart.assist.surround.forEach',
    34,
    "Surround with 'for'",
  );
  static const SURROUND_WITH_FOR_IN = AssistKind(
    'dart.assist.surround.forIn',
    35,
    "Surround with 'for-in'",
  );
  static const SURROUND_WITH_IF = AssistKind(
    'dart.assist.surround.if',
    37,
    "Surround with 'if'",
  );
  static const SURROUND_WITH_SET_STATE = AssistKind(
    'dart.assist.surround.setState',
    33,
    "Surround with 'setState'",
  );
  static const SURROUND_WITH_TRY_CATCH = AssistKind(
    'dart.assist.surround.tryCatch',
    32,
    "Surround with 'try-catch'",
  );
  static const SURROUND_WITH_TRY_FINALLY = AssistKind(
    'dart.assist.surround.tryFinally',
    31,
    "Surround with 'try-finally'",
  );
  static const SURROUND_WITH_WHILE = AssistKind(
    'dart.assist.surround.while',
    36,
    "Surround with 'while'",
  );
  static const USE_CURLY_BRACES = AssistKind(
    'dart.assist.surround.curlyBraces',
    30,
    'Use curly braces',
  );
}
