(function ($) {
  $(document).ready(function () {
    // --- JavaScript for Return URL on Form Submission ---
    // Listen for submission on any form that *might* contain a 'return_url' input
    $('form').on('submit', function () {
      var $form = $(this);
      var $returnUrlInput = $form.find('input[name="return_url"]');
      if ($returnUrlInput.length > 0) {
        $returnUrlInput.val(window.location.href);
      }
    });
    // --- End JavaScript for Return URL on Form Submission ---
    // --- JavaScript for Collapsible Headers (independent toggling + edit mode logic) ---
    $('.collapsible-header').on('click', function () {
      var $button = $(this);
      var targetId = $button.data('target-id');
      var $targetContent = $('#' + targetId);
      $targetContent.toggleClass('is-hidden');
      $button.toggleClass('is-collapsed');
      var isExpanded = $button.attr('aria-expanded') === 'true';
      $button.attr('aria-expanded', !isExpanded);
      // --- LOGIC FOR tagged-item-edit-mode ---
      if ($targetContent.hasClass('edit-tags-collapsible')) {
        var $taggedItemContainer = $targetContent.closest('.tagged-item-container');
        if ($taggedItemContainer.length > 0) {
          if ($targetContent.hasClass('is-hidden')) {
            $taggedItemContainer.removeClass('tagged-item-edit-mode');
          } else {
            $taggedItemContainer.addClass('tagged-item-edit-mode');
          }
        }
      }
      // --- END LOGIC ---
    });
    // --- End JavaScript for Collapsible Headers ---
    var $allTaggedItems = $('.tagged-item-list .tagged-item-container');
    var totalItems = $allTaggedItems.length;
    var $clearAllBtn = $('#clearAllFiltersBtn');
    var $toggleAdminControlsBtn = $('#toggleAdminControls');
    var filterParamMap = {
      'tag_filter': 'tags',
      'search_term': 'q',
      'letter_filter': 'letter'
    };
    // Event listeners for applying filters
    $('.tag-filter-sidebar input[type="checkbox"]').on('change', function () {
      applyFilters();
    });
    $('#searchBarFilter').on('input', function () {
      applyFilters();
    });
    // --- LETTER FILTERS CLICK HANDLER ---
    $('.letter-filters button').on('click', function () {
      var $thisButton = $(this);
      var selectedLetterOnButton = $thisButton.data('letter');
      var isActive = $thisButton.hasClass('is-active-letter-filter');
      // Toggle the active state for the clicked button
      $('.letter-filters button').removeClass('is-active-letter-filter');
      if (!isActive) {
        $thisButton.addClass('is-active-letter-filter');
      }
      // If it WAS active, then clicking it again will just clear the active class, which is correct for toggling off.
      // Always re-apply filters after a letter button click
      applyFilters();
    });
    // --- END LETTER FILTERS CLICK HANDLER ---
    // Event listeners for removing active filters from the display
    $('#activeTagFilters').on('click', '.active-tag-item[data-filter-type="tag"]', function () {
      var tagToRemove = $(this).data('tag-value');
      $('.tag-filter-sidebar input[type="checkbox"][value="' + tagToRemove + '"]').prop('checked', false);
      applyFilters();
    });
    $('#activeTagFilters').on('click', '.active-tag-item[data-filter-type="search"]', function () {
      $('#searchBarFilter').val('');
      applyFilters();
    });
    // --- ACTIVE LETTER FILTER REMOVAL ---
    $('#activeTagFilters').on('click', '.active-tag-item[data-filter-type="letter"]', function () {
      var letterToRemove = $(this).data('tag-value');
      // Ensure the corresponding letter button is deactivated
      $('.letter-filters button[data-letter="' + letterToRemove + '"]').removeClass('is-active-letter-filter');
      applyFilters();
    });
    // --- END ACTIVE LETTER FILTER REMOVAL ---
    // Clear all filters button
    $clearAllBtn.on('click', function () {
      $('.tag-filter-sidebar input[type="checkbox"]').prop('checked', false);
      $('#searchBarFilter').val('');
      $('.letter-filters button').removeClass('is-active-letter-filter');
      applyFilters();
    });
    // Toggle Admin Controls Visibility (if #toggleAdminControls exists)
    if ($toggleAdminControlsBtn.length) {
      $toggleAdminControlsBtn.on('click', function () {
        $('.tag-admin-control').toggleClass('is-hidden');
      });
    }
    // --- MAIN FILTER APPLICATION LOGIC ---
    function applyFilters() {
      var selectedTags = [];
      $('.tag-filter-sidebar input[type="checkbox"]:checked').each(function () {
        selectedTags.push($(this).val());
      });
      var searchTerm = $('#searchBarFilter').val().toLowerCase().trim();
      // Correctly get the currently active letter filter
      var selectedLetter = $('.letter-filters button.is-active-letter-filter').data('letter') || '';
      $allTaggedItems.each(function () {
        var $item = $(this).find('a.tagged-item');
        var itemTags = [];
        $item.find('.tagged-item-tags .item-tag').each(function () {
          itemTags.push($(this).text().trim());
        });
        var itemFullText = $item.text().toLowerCase();
        var itemNameFirstChar = $item.find('.tagged-item-name').text().trim().charAt(0);
        var matchesTags = true;
        if (selectedTags.length > 0) {
          for (var i = 0; i < selectedTags.length; i++) {
            if (!itemTags.includes(selectedTags[i])) {
              matchesTags = false;
              break;
            }
          }
        }
        var matchesSearch = true;
        if (searchTerm.length > 0) {
          matchesSearch = itemFullText.includes(searchTerm);
        }
        // --- LETTER MATCHING LOGIC ---
        var matchesLetter = true;
        if (selectedLetter.length > 0) {
          // Check if item's first character matches selected letter or is a number for '0-9'
          if (selectedLetter === '0-9') {
            matchesLetter = !isNaN(parseInt(itemNameFirstChar, 10));
          } else {
            matchesLetter = (itemNameFirstChar.toLowerCase() === selectedLetter.toLowerCase());
          }
        }
        // --- END LETTER MATCHING LOGIC ---
        var showItem = matchesTags && matchesSearch && matchesLetter;
        if (showItem) {
          $item.parent().removeClass('is-hidden').removeAttr('aria-hidden');
        } else {
          $item.parent().addClass('is-hidden').attr('aria-hidden', 'true');
        }
      });
      $allTaggedItems.find('.item-tag').removeClass('is-active-tag');
      if (selectedTags.length > 0) {
        $allTaggedItems.each(function () {
          var $item = $(this);
          if (!$item.hasClass('is-hidden')) {
            $item.find('.item-tag').each(function () {
              var $itemTag = $(this);
              if (selectedTags.includes($itemTag.text().trim())) {
                $itemTag.addClass('is-active-tag');
              }
            });
          }
        });
      }
      updateActiveFiltersDisplay(selectedTags, searchTerm, selectedLetter);
      updateItemCountDisplay();
      updateUrlParameters(selectedTags, searchTerm, selectedLetter);
    }
    // --- END MAIN FILTER APPLICATION LOGIC ---
    // Functions for updating the display of active filters, item count, and URL
    // --- updateActiveFiltersDisplay ---
    function updateActiveFiltersDisplay(selectedTags, searchTerm, selectedLetter) {
      var $activeTagFilters = $('#activeTagFilters');
      $activeTagFilters.empty();
      $.each(selectedTags, function (index, tagValue) {
        var $activeTag = $('');
        $activeTag.text(tagValue);
        $activeTag.attr('data-tag-value', tagValue);
        var $removeButton = $('').html('×');
        $activeTag.append($removeButton);
        $activeTagFilters.append($activeTag);
      });
      if (searchTerm.length > 0) {
        var $activeSearchTag = $('');
        $activeSearchTag.text('Search: "' + searchTerm + '"');
        $activeSearchTag.attr('data-tag-value', searchTerm);
        var $removeButton = $('').html('×');
        $activeSearchTag.append($removeButton);
        $activeTagFilters.append($activeSearchTag);
      }
      // Ensure the letter filter is correctly displayed when selected
      if (selectedLetter.length > 0) {
        var displayLetter = (selectedLetter === '0-9') ? '0-9' : selectedLetter.toUpperCase();
        var $activeLetterTag = $('');
        $activeLetterTag.text('Starts with: "' + displayLetter + '"');
        $activeLetterTag.attr('data-tag-value', selectedLetter);
        var $removeButton = $('').html('×');
        $activeLetterTag.append($removeButton);
        $activeTagFilters.append($activeLetterTag);
      }
    }
    // --- END updateActiveFiltersDisplay ---
    function updateItemCountDisplay() {
      var visibleItemsCount = $('.tagged-item-list .tagged-item-container:not(.is-hidden)').length;
      var $itemCountDiv = $('.item-count');
      if (visibleItemsCount === totalItems) {
        $itemCountDiv.text('Showing ' + totalItems);
      } else {
        $itemCountDiv.text('Showing ' + visibleItemsCount + ' of ' + totalItems);
      }
    }
    function updateUrlParameters(tags, searchTerm, selectedLetter) {
      var url = new URL(window.location.href);
      var params = url.searchParams;
      params.delete(filterParamMap['tag_filter']);
      params.delete(filterParamMap['search_term']);
      params.delete(filterParamMap['letter_filter']);
      tags.forEach(function (tag) {
        params.append(filterParamMap['tag_filter'], tag);
      });
      if (searchTerm.length > 0) {
        params.set(filterParamMap['search_term'], searchTerm);
      }
      if (selectedLetter.length > 0) {
        params.set(filterParamMap['letter_filter'], selectedLetter);
      }
      history.pushState(null, '', url.toString());
    }
    function initializeFiltersFromUrl() {
      var urlParams = new URLSearchParams(window.location.search);
      var urlTags = urlParams.getAll(filterParamMap['tag_filter']);
      var urlSearchTerm = urlParams.get(filterParamMap['search_term']) || '';
      var urlLetter = urlParams.get(filterParamMap['letter_filter']) || '';
      if (urlTags.length > 0) {
        urlTags.forEach(function (tag) {
          $('.tag-filter-sidebar input[type="checkbox"][value="' + tag + '"]').prop('checked', true);
        });
      }
      if (urlSearchTerm.length > 0) {
        $('#searchBarFilter').val(urlSearchTerm);
      }
      if (urlLetter.length > 0) {
        var targetButtonDataValue = (urlLetter === '0-9') ? '0-9' : urlLetter.toUpperCase();
        $('.letter-filters button[data-letter="' + targetButtonDataValue + '"]').addClass('is-active-letter-filter');
      }
      applyFilters();
    }
    initializeFiltersFromUrl();
  });
})(jQuery);