/**
 * @copyright  (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */
// eslint-disable no-alert
((Joomla, document) => {

  if (!Joomla) {
    throw new Error('core.js was not properly initialised');
  }
  Joomla.finderIndexer = () => {
    const path = 'index.php?option=com_finder&task=indexer.debug&tmpl=component&format=json';
    const token = `&${document.getElementById('finder-indexer-token').getAttribute('name')}=1`;
    Joomla.debugIndexing = () => {
      const formEls = new URLSearchParams(Array.from(new FormData(document.getElementById('debug-form')))).toString();
      const getResponseMessage = response => {
        try {
          const parsed = JSON.parse(response);
          return parsed.message || response;
        } catch (e) {
          return response;
        }
      };
      Joomla.request({
        url: `${path}${token}&${formEls}`,
        method: 'GET',
        data: '',
        perform: true,
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        onSuccess: response => {
          const output = document.getElementById('indexer-output');
          const allowedHtml = {
            fieldset: [],
            legend: [],
            dl: ['class'],
            dt: ['class'],
            dd: ['class']
          };
          try {
            const parsed = JSON.parse(response);
            if (parsed.error) {
              output.textContent = getResponseMessage(response);
              return;
            }
            output.innerHTML = Joomla.sanitizeHtml(parsed.rendered, allowedHtml);
          } catch (e) {
            output.innerHTML = Joomla.sanitizeHtml(response, allowedHtml);
          }
        },
        onError: xhr => {
          const output = document.getElementById('indexer-output');
          output.textContent = getResponseMessage(xhr.response);
        }
      });
    };
  };
})(Joomla, document);

// @todo use directly the Joomla.finderIndexer() instead of the Indexer()!!!
document.addEventListener('DOMContentLoaded', () => {
  window.Indexer = Joomla.finderIndexer();
});
