// 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_BUILDER = AssistKind(
    'dart.assist.flutter.wrap.builder',
    32,
    'Wrap with Builder',
  );
  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',
  );
}
