/**
 * @file
 * Attaches administration-specific behavior for the Filter module.
 */

(function ($, Drupal) {
  /**
   * Displays and updates the status of filters on the admin page.
   *
   * @type {Drupal~behavior}
   *
   * @prop {Drupal~behaviorAttach} attach
   *   Attaches behaviors to the filter admin view.
   */
  Drupal.behaviors.filterStatus = {
    attach(context, settings) {
      const $context = $(context);
      $context
        .find('#filters-status-wrapper input.form-checkbox')
        .once('filter-status')
        .each(function () {
          const $checkbox = $(this);
          // Retrieve the tabledrag row belonging to this filter.
          const $row = $context
            .find(`#${$checkbox.attr('id').replace(/-status$/, '-weight')}`)
            .closest('tr');
          // Retrieve the vertical tab belonging to this filter.
          const $filterSettings = $context.find(
            `[data-drupal-selector='${$checkbox
              .attr('id')
              .replace(/-status$/, '-settings')}']`,
          );
          const filterSettingsTab = $filterSettings.data('verticalTab');

          // Bind click handler to this checkbox to conditionally show and hide
          // the filter's tableDrag row and vertical tab pane.
          $checkbox.on('click.filterUpdate', () => {
            if ($checkbox.is(':checked')) {
              $row.show();
              if (filterSettingsTab) {
                filterSettingsTab.tabShow().updateSummary();
              } else {
                // On very narrow viewports, Vertical Tabs are disabled.
                $filterSettings.show();
              }
            } else {
              $row.hide();
              if (filterSettingsTab) {
                filterSettingsTab.tabHide().updateSummary();
              } else {
                // On very narrow viewports, Vertical Tabs are disabled.
                $filterSettings.hide();
              }
            }
            // Restripe table after toggling visibility of table row.
            Drupal.tableDrag['filter-order'].restripeTable();
          });

          // Attach summary for configurable filters (only for screen readers).
          if (filterSettingsTab) {
            filterSettingsTab.details.drupalSetSummary(() =>
              $checkbox.is(':checked')
                ? Drupal.t('Enabled')
                : Drupal.t('Disabled'),
            );
          }

          // Trigger our bound click handler to update elements to initial state.
          $checkbox.triggerHandler('click.filterUpdate');
        });
    },
  };
})(jQuery, Drupal);
