import {
  assign
} from 'min-dash';


/**
 * 定制调色板/感觉就是左边的菜单
 * A palette that allows you to create BPMN _and_ custom elements.
 * 允许您创建bpmn和定制元素的调色板。
 */
export default function PaletteProvider(palette, create, elementFactory, spaceTool, lassoTool, handTool,
  globalConnect, translate) {
  this._palette = palette;
  this._create = create;
  this._elementFactory = elementFactory;
  this._spaceTool = spaceTool;
  this._lassoTool = lassoTool;
  this._handTool = handTool;
  this._globalConnect = globalConnect;
  this._translate = translate;
  palette.registerProvider(this);
}

PaletteProvider.$inject = [
  'palette',
  'create',
  'elementFactory',
  'spaceTool',
  'lassoTool',
  'handTool',
  'globalConnect',
  'translate'
];


PaletteProvider.prototype.getPaletteEntries = function (element) {
  var actions = {},
    create = this._create,
    elementFactory = this._elementFactory,
    spaceTool = this._spaceTool,
    lassoTool = this._lassoTool,
    handTool = this._handTool,
    globalConnect = this._globalConnect,
    translate = this._translate;


  function createAction(type, group, className, title, options) {

    function createListener(event) {
      var shape = elementFactory.createShape(assign({
        type: type
      }, options));

      if (options) {
        shape.businessObject.di.isExpanded = options.isExpanded;
      }
      create.start(event, shape);
    }
    var shortType = type.replace(/^bpmn:/, '');
    return {
      group: group,
      className: className + ' afterText',
      title: translate(title || 'Create ' + shortType),
      action: {
        dragstart: createListener,
        click: createListener
      }
    };
  }
  function createParticipant(event, collapsed) {
    create.start(event, elementFactory.createParticipantShape(collapsed));
  }

  assign(actions, {
    /*'hand-tool': createAction(
      'custom:triangle', 'custom', 'icon-custom-triangle'
    ),
    'custom-circle': createAction(
      'custom:circle', 'custom', 'icon-custom-circle'
    ),
    'custom-separator': {
      group: 'custom',
      separator: true
    },
    */
    /*
     'hand-tool': {
       group: 'tools',
       className: 'bpmn-icon-hand-tool',
       title: translate('Activate the hand tool'),
       action: {
         click: function(event) {
           handTool.activateHand(event);
         }
       }
     },
     
     
     'space-tool': {
       group: 'tools',
       className: 'bpmn-icon-space-tool',
       title: translate('Activate the create/remove space tool'),
       action: {
         click: function(event) {
           spaceTool.activateSelection(event);
         }
       }
     },
     'tool-separator': {
       group: 'tools',
       separator: true
     },*/
    //事件
    'create.start-event': createAction(
      'bpmn:StartEvent', 'event', 'bpmn-icon-start-event-none'
    ),
    /*
    'create.intermediate-event': createAction(
      'bpmn:IntermediateThrowEvent', 'event', 'bpmn-icon-intermediate-event-none'
    ),*/
    'create.end-event': createAction(
      'bpmn:EndEvent', 'event', 'bpmn-icon-end-event-none'
    ),
    'event-separator': {
      group: 'event',
      separator: true
    },
    //task 任务
    'create.user-task': createAction(
      'bpmn:UserTask', 'task', 'bpmn-icon-user-task'
    ),
    'create.service-task': createAction(
      'bpmn:ServiceTask', 'task', 'bpmn-icon-service-task'
    ),
    'create.script-task': createAction(
      'bpmn:ScriptTask', 'task', 'bpmn-icon-script-task'
    ),
    'create.receive-task': createAction(
      'bpmn:ReceiveTask', 'task', 'bpmn-icon-receive-task'
    ),
    'create.manual-task': createAction(
      'bpmn:ManualTask', 'task', 'bpmn-icon-manual-task'
    ),
    'task-separator': {
      group: 'task',
      separator: true
    },
    //subprocess 流程
    // 'create.subprocess-expanded': createAction(
    //   'bpmn:SubProcess', 'subprocess', 'bpmn-icon-subprocess-expanded', 'Create expanded SubProcess', {
    //     isExpanded: true
    //   }
    // ),
    //collapsed-subprocess
    /* 'create.subprocess-collapsed': createAction(
      'bpmn:SubProcess', 'subprocess', 'bpmn-icon-subprocess-collapsed', 'Create collapsed SubProcess'
    ), */
    'create.callactivity': createAction(
      'bpmn:CallActivity', 'subprocess', 'bpmn-icon-call-activity', 'Call Activity'
    ),
    'subprocess-separator': {
      group: 'subprocess',
      separator: true
    },

    //Gateway 网关

    'create.exclusive-gateway': createAction(
      'bpmn:ExclusiveGateway', 'gateway', 'bpmn-icon-gateway-xor'
    ),
    'create.inclusive-gateway': createAction(
      'bpmn:InclusiveGateway', 'gateway', 'bpmn-icon-gateway-or'
    ),

    'gateway-separator': {
      group: 'gateway',
      separator: true
    },
    //工具
    'global-connect-tool': {
      group: 'endTools',
      className: 'bpmn-icon-connection-multi afterText',
      title: translate('Activate the global connect tool'),
      action: {
        click: function (event) {
          globalConnect.toggle(event);
        }
      }
    },
    'lasso-tool': {
      group: 'endTools',
      className: 'bpmn-icon-lasso-tool afterText',
      title: translate('Activate the lasso tool'),
      action: {
        click: function (event) {
          lassoTool.activateSelection(event);
        }
      }
    },
    //bpmn:TextAnnotation
    'Append TextAnnotation':createAction(
      'bpmn:TextAnnotation', 'endTools', 'bpmn-icon-text-annotation','Append TextAnnotation'
    ),
    /*
    'create.data-object': createAction(
      'bpmn:DataObjectReference', 'data-object', 'bpmn-icon-data-object'
    ),

    'create.participant-expanded': {
      group: 'collaboration',
      className: 'bpmn-icon-participant',
      title: 'Create Pool/Participant',
      action: {
        dragstart: createParticipant,
        click: createParticipant
      }
    }*/
  });

  return actions;
};
