import {isOptionEnabled} from '../../../common/optionsUtils.js';
import WorkflowsStorage from '../../../workflows/workflowsStorage.js';
import {addElementToThreadListActions, shouldAddBtnToActionBar} from '../utils/common.js';

const wfDebugId = 'twpt-workflows';

export default class Workflows {
  constructor() {
    this.menu = null;
    this.workflows = null;

    // Always keep the workflows list updated
    WorkflowsStorage.watch(workflows => {
      this.workflows = workflows;
      this._emitWorkflowsUpdateEvent();
    }, /* asProtobuf = */ false);

    // Open the workflow manager when instructed to do so.
    document.addEventListener('twpt-open-workflow-manager', () => {
      chrome.runtime.sendMessage({
        message: 'openWorkflowsManager',
      });
    });
  }

  _emitWorkflowsUpdateEvent() {
    if (!this.menu) return;
    const e = new CustomEvent('twpt-workflows-update', {
      detail: {
        workflows: this.workflows,
      }
    });
    this.menu?.dispatchEvent?.(e);
  }

  addThreadListBtnIfEnabled(readToggle) {
    isOptionEnabled('workflows').then(isEnabled => {
      if (isEnabled) {
        this.menu = document.createElement('twpt-workflows-inject');
        this.menu.setAttribute('debugid', wfDebugId);
        this._emitWorkflowsUpdateEvent();
        addElementToThreadListActions(readToggle, this.menu);
      }
    });
  }

  shouldAddThreadListBtn(node) {
    return shouldAddBtnToActionBar(wfDebugId, node);
  }
};
