(function($) {
  $.fn.modalFutura = function(options) {
    var settings = $.extend(
      {
        dataModalId: false,
        appendModal: false,
        prevModal: false,
        closeClickOut: true,
      },
      options
    );

    var modal = [];

    this.each(function() {
      var $modal;
      if ($('#' + $(this).data('modal-id')).length > 0) {
        $modal = $('#' + $(this).data('modal-id'));
      } else {
        $modal =
          '<div id="' + settings.dataModalId + '" class="js-adm-modal-overlay">' + settings.appendModal + '</div>';
      }

      $('.js-adm-modal-overlay').addClass('hidden'); // Escode todos os modais

      if (typeof $modal !== 'string' && $modal.hasClass('hidden')) {
        // Existe modal no html
        $modal.removeClass('hidden'); // Mostra o modal
      } else {
        $modal = $($modal);
        $('body').append($modal);
      }

      // Estiliza todos os modais
      $('.js-adm-modal-overlay').addClass('adm-modal-overlay overlay overlay-black-3');
      $('.js-adm-modal-container').addClass('adm-modal-container center-middle-fixed background-white');

      if (settings.dataModalId == 'bulk-setting') {
        $('.js-adm-modal-overlay').addClass('js-adm-modal-overlay-no-close');
      }

      $modal.find('.js-adm-modal-close').on('click', closeModal);

      if (settings.closeClickOut) {
        $modal.on('click', closeModal);
      }

      function closeModal(event) {
        // impede que o modal se feche quando clicar dentro do modal
        // porque o modal e filho do overlay e todo clique no modal é propagado para o overlay
        // não usar event.stopPropagation(); porque tem códigos com eventos atribuitos no body
        // Ex: $('body').on('click', '.minha-class', function)
        if ($(this).hasClass('js-adm-modal-overlay') && !$(event.target).hasClass('js-adm-modal-overlay')) {
          return;
        }

        if ($(this).hasClass('js-adm-modal-overlay-no-close')) {
          return false;
        }

        $('.js-adm-modal-overlay').addClass('hidden');
        $('[data-modal-id="' + $modal.attr('id') + '"]')
          .parent()
          .closest('.js-adm-modal-overlay')
          .removeClass('hidden');

        if (settings.prevModal) {
          $(settings.prevModal).removeClass('hidden');
        }
      }

      modal.push($modal);
    });

    return modal;
  };
})(jQuery);
