// Copyright (c) 2013, 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.

library function_view_element;

import 'observatory_element.dart';
import 'package:observatory/service.dart';

import 'package:polymer/polymer.dart';

@CustomTag('function-view')
class FunctionViewElement extends ObservatoryElement {
  @published ServiceMap function;
  FunctionViewElement.created() : super.created();

  // TODO(turnidge): Once we create a Function object, these fields
  // should move there.
  @published String qualifiedName;
  @published String kind;

  String _getQualifiedName(ServiceMap function) {
    var parent = (function != null && function['parent'] != null
                  ? function['parent'] : null);
    if (parent != null) {
      return "${_getQualifiedName(parent)}.${function['user_name']}";
    }
    var cls = (function != null &&
               function['owner'] != null &&
               function['owner'].serviceType == 'Class'
               ? function['owner'] : null);
    if (cls != null) {
      return "${cls['user_name']}.${function['user_name']}";
    }
    return "${function['user_name']}";
  }

  void functionChanged(oldValue) {
    notifyPropertyChange(#qualifiedName, 0, 1);
    notifyPropertyChange(#kind, 0, 1);
    qualifiedName = _getQualifiedName(function);
    switch(function['kind']) {
      case 'kRegularFunction':
        kind = 'function';
        break;
      case 'kClosureFunction':
        kind = 'closure function';
        break;
      case 'kSignatureFunction':
        kind = 'signature function';
        break;
      case 'kGetterFunction':
        kind = 'getter function';
        break;
      case 'kSetterFunction':
        kind = 'setter function';
        break;
      case 'kConstructor':
        kind = 'constructor';
        break;
      case 'kImplicitGetterFunction':
        kind = 'implicit getter function';
        break;
      case 'kImplicitSetterFunction':
        kind = 'implicit setter function';
        break;
      case 'kStaticInitializer':
        kind = 'static initializer';
        break;
      case 'kMethodExtractor':
        kind = 'method extractor';
        break;
      case 'kNoSuchMethodDispatcher':
        kind = 'noSuchMethod dispatcher';
        break;
      case 'kInvokeFieldDispatcher':
        kind = 'invoke field dispatcher';
        break;
      default:
        kind = 'UNKNOWN';
        break;
    }
  }

  void refresh(var done) {
    function.reload().whenComplete(done);
  }
}
