class ConcordanceQueryBuilder {

  constructor() {
    
    this.elements = new ElementReferencesQueryBuilder();
    this.generalFunctions = new GeneralFunctionsQueryBuilder(this.elements);
    this.tokenAttributeBuilderFunctions = new TokenAttributeBuilderFunctionsQueryBuilder(this.elements);
    this.structuralAttributeBuilderFunctions = new StructuralAttributeBuilderFunctionsQueryBuilder(this.elements);

    // Eventlisteners for the incidence modifiers. There are two different types of incidence modifiers: token and character incidence modifiers.
    document.querySelectorAll('.incidence-modifier-selection').forEach(button => {
      let dropdownId = button.parentNode.parentNode.id;
      if (dropdownId === 'corpus-analysis-concordance-token-incidence-modifiers-dropdown') {
        button.addEventListener('click', () => this.generalFunctions.tokenIncidenceModifierHandler(button.dataset.token, button.innerHTML));
      } else if (dropdownId === 'corpus-analysis-concordance-character-incidence-modifiers-dropdown') {
        button.addEventListener('click', () => this.tokenAttributeBuilderFunctions.characterIncidenceModifierHandler(button));
      }
    });
    
    // Eventlisteners for the submit of n- and m-values of the incidence modifier modal for "exactly n" or "between n and m".
    document.querySelectorAll('.n-m-submit-button').forEach(button => {
      let modalId = button.dataset.modalId;
      if (modalId === 'corpus-analysis-concordance-exactly-n-token-modal' || modalId === 'corpus-analysis-concordance-between-nm-token-modal') {
        button.addEventListener('click', () => this.generalFunctions.tokenNMSubmitHandler(modalId));
      } else if (modalId === 'corpus-analysis-concordance-exactly-n-character-modal' || modalId === 'corpus-analysis-concordance-between-nm-character-modal') {
        button.addEventListener('click', () => this.tokenAttributeBuilderFunctions.characterNMSubmitHandler(modalId));
      }
    });

    document.querySelector('#corpus-analysis-concordance-text-annotation-submit').addEventListener('click', () => this.structuralAttributeBuilderFunctions.textAnnotationSubmitHandler());

    this.elements.positionalAttrModal = M.Modal.init(
      document.querySelector('#corpus-analysis-concordance-positional-attr-modal'), 
      {
        onOpenStart: () => {
          this.tokenAttributeBuilderFunctions.preparePositionalAttrModal();
        },
        onCloseStart: () => {
          this.tokenAttributeBuilderFunctions.resetPositionalAttrModal();
        }
      }
    );
    this.elements.structuralAttrModal = M.Modal.init(
      document.querySelector('#corpus-analysis-concordance-structural-attr-modal'), 
      {
        onCloseStart: () => {
          this.structuralAttributeBuilderFunctions.resetStructuralAttrModal();
        }
      }
    );
  }
}