/**
 * @copyright   (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
(() => {

  document.addEventListener('DOMContentLoaded', () => {
    const folders = [...document.querySelectorAll('.folder-url, .component-folder-url, .plugin-folder-url, .layout-folder-url')];
    const innerLists = [...document.querySelectorAll('.folder ul, .component-folder ul, .plugin-folder ul, .layout-folder ul')];
    const openLists = [...document.querySelectorAll('.show > ul')];
    const fileModalFolders = [...document.querySelectorAll('#fileModal .folder-url')];
    const folderModalFolders = [...document.querySelectorAll('#folderModal .folder-url')];
    // Hide all the folders when the page loads
    innerLists.forEach(innerList => {
      innerList.classList.add('hidden');
    });

    // Show all the lists in the path of an open file
    openLists.forEach(openList => {
      openList.classList.remove('hidden');
    });

    // Stop the default action of anchor tag on a click event and release the inner list
    folders.forEach(folder => {
      folder.addEventListener('click', event => {
        event.preventDefault();
        const list = event.currentTarget.parentNode.querySelector('ul');
        if (!list) {
          return;
        }
        if (!list.classList.contains('hidden')) {
          list.classList.add('hidden');
        } else {
          list.classList.remove('hidden');
        }
      });
    });

    // File modal tree selector
    fileModalFolders.forEach(fileModalFolder => {
      fileModalFolder.addEventListener('click', event => {
        event.preventDefault();
        fileModalFolders.forEach(fileModalFold => {
          fileModalFold.classList.remove('selected');
        });
        event.currentTarget.classList.add('selected');
        const ismedia = event.currentTarget.dataset.base === 'media' ? 1 : 0;
        [...document.querySelectorAll('#fileModal input.address')].forEach(element => {
          element.value = event.currentTarget.getAttribute('data-id');
        });
        [...document.querySelectorAll('#fileModal input[name="isMedia"]')].forEach(el => {
          el.value = ismedia;
        });
      });
    });

    // Folder modal tree selector
    folderModalFolders.forEach(folderModalFolder => {
      folderModalFolder.addEventListener('click', event => {
        event.preventDefault();
        folderModalFolders.forEach(folderModalFldr => {
          folderModalFldr.classList.remove('selected');
        });
        event.currentTarget.classList.add('selected');
        const ismedia = event.currentTarget.dataset.base === 'media' ? 1 : 0;
        [...document.querySelectorAll('#folderModal input.address')].forEach(element => {
          element.value = event.currentTarget.getAttribute('data-id');
        });
        [...document.querySelectorAll('#folderModal input[name="isMedia"]')].forEach(el => {
          el.value = ismedia;
        });
      });
    });
    const treeContainer = document.querySelector('#treeholder .treeselect');
    const listEls = [...treeContainer.querySelectorAll('.folder.show')];
    const filePathEl = document.querySelector('p.lead.hidden.path');
    if (filePathEl) {
      let filePathTmp = document.querySelector('p.lead.hidden.path').innerText;
      if (filePathTmp && filePathTmp.charAt(0) === '/') {
        filePathTmp = filePathTmp.slice(1);
        filePathTmp = filePathTmp.split('/');
        filePathTmp = filePathTmp[filePathTmp.length - 1];
        listEls.forEach((element, index) => {
          element.querySelector('a').classList.add('active');
          if (index === listEls.length - 1) {
            const parentUl = element.querySelector('ul');
            [...parentUl.querySelectorAll('li')].forEach(liElement => {
              const aEl = liElement.querySelector('a');
              const spanEl = aEl.querySelector('span');
              if (spanEl && spanEl.innerText.trim()) {
                aEl.classList.add('active');
              }
            });
          }
        });
      }
    }

    // Image cropper
    const image = document.getElementById('image-crop');
    if (image) {
      const width = document.getElementById('imageWidth').value;
      const height = document.getElementById('imageHeight').value;

      // eslint-disable-next-line no-new
      new window.Cropper(image, {
        viewMode: 1,
        scalable: true,
        zoomable: false,
        movable: false,
        dragMode: 'crop',
        cropBoxMovable: true,
        cropBoxResizable: true,
        autoCrop: true,
        autoCropArea: 1,
        background: true,
        center: true,
        minCanvasWidth: width,
        minCanvasHeight: height
      });
      image.addEventListener('crop', e => {
        document.getElementById('x').value = e.detail.x;
        document.getElementById('y').value = e.detail.y;
        document.getElementById('w').value = e.detail.width;
        document.getElementById('h').value = e.detail.height;
      });
    }
  });
})();
