/**
 * vue-cesium - https://github.com/zouyaoji/vue-cesium
 * Vue 2.x components for CesiumJS.
 *
 * @package VueCesium
 * @author zouyaoji <370681295@qq.com>
 * @version 2.2.8
 * @license MIT
 * @homepage https://zouyaoji.top/vue-cesium
 * @copyright (c) 2018-2021, zouyaoji <370681295@qq.com>
 */
import _Object$defineProperties from '@babel/runtime-corejs2/core-js/object/define-properties';
import _regeneratorRuntime from '@babel/runtime-corejs2/regenerator';
import cmp from '../virtualCmp';
import mergeDescriptors from '../../utils/mergeDescriptors';
import mixinPickEvent from '../event/mixinPickEvent';

var methods = {
  mount: function mount() {
    var primitives, collection, registerEvents;
    return _regeneratorRuntime.async(function mount$(_context) {
      while (1) {
        switch (_context.prev = _context.next) {
          case 0:
            primitives = this.primitives, collection = this.collection, registerEvents = this.registerEvents;
            registerEvents(true);
            collection._vcParent = primitives;
            return _context.abrupt("return", primitives && primitives.add(collection));

          case 4:
          case "end":
            return _context.stop();
        }
      }
    }, null, this);
  },
  unmount: function unmount() {
    var primitives, collection, registerEvents;
    return _regeneratorRuntime.async(function unmount$(_context2) {
      while (1) {
        switch (_context2.prev = _context2.next) {
          case 0:
            primitives = this.primitives, collection = this.collection, registerEvents = this.registerEvents;
            registerEvents(false);
            return _context2.abrupt("return", primitives && !collection.isDestroyed() && primitives.remove(collection));

          case 3:
          case "end":
            return _context2.stop();
        }
      }
    }, null, this);
  },
  getServices: function getServices() {
    var vm = this;
    return mergeDescriptors(cmp.methods.getServices.call(this), {
      get primitives() {
        return vm.collection;
      },

      get collectionContainer() {
        return vm;
      }

    });
  }
};
var mixinPrimitiveCollection = {
  mixins: [cmp, mixinPickEvent],
  methods: methods,
  props: {
    enableEvent: {
      type: Boolean,
      default: true
    }
  },
  stubVNode: {
    attrs: function attrs() {
      return {
        class: this.$options.name
      };
    }
  },
  created: function created() {
    var _this = this;

    _Object$defineProperties(this, {
      collection: {
        enumerable: true,
        get: function get() {
          return _this.cesiumObject;
        }
      },
      primitives: {
        enumerable: true,
        get: function get() {
          return _this.$services && _this.$services.primitives;
        }
      },
      groundPrimitives: {
        enumerable: true,
        get: function get() {
          return _this.$services && _this.$services.groundPrimitives;
        }
      }
    });
  }
};

export default mixinPrimitiveCollection;
