angular.module('panelApp').controller('ModelCtrl', function ModelCtrl($scope, appContext, appModel) {

  $scope.inspect = function () {
    appContext.inspect(this.val.id);
  };
  $scope.select = function () {
    $scope.selectedScope = this.val.id;
  };

  // TODO: fix this
  $scope.edit = function () {
    appContext.executeOnScope(this.val.id, function (scope, elt, args) {
      scope.$apply(function () {
        scope[args.name] = args.value;
      });
    }, {
      name: this.key,
      value: JSON.parse(this.item)
    });
  };

  $scope.roots = [];
  $scope.model = null;

  $scope.selectedRoot = null;
  $scope.selectedScope = null;

  $scope.enableInspector = appModel.enableInspector;


  $scope.$on('poll', function () {

    // get the list of root scopes
    appModel.getRootScopes(function (rootScopes) {
      $scope.$apply(function () {
        $scope.roots = rootScopes;
        if ($scope.roots.length === 0) {
          $scope.selectedRoot = null;
        } else if (!$scope.selectedRoot) {
          $scope.selectedRoot = $scope.roots[0];
        }
        if ($scope.selectedRoot && !$scope.selectedScope) {
          $scope.selectedScope = $scope.selectedRoot;
        }
      });
    });

    // get scope tree
    if ($scope.selectedRoot) {
      appModel.getScopeTree($scope.selectedRoot, function (tree) {
        $scope.$apply(function () {
          $scope.tree = tree;
        });
      });
    }

    // get models on the selected scope
    if ($scope.selectedScope) {
      appModel.getModel($scope.selectedScope, function (model) {
        $scope.$apply(function () {
          $scope.model = model;
        });
      });
    }
  });


});
