<script src="/admin/app-assets/vendors/js/forms/select/select2.full.min.js"></script>
<script src="/admin/app-assets/js/scripts/forms/select/form-select2.js"></script>

<script>
  $(document).ready(function () {
    $('.select2').select2({
      closeOnSelect: true,
    });
  });

  function validateInput(input) {
    const i18n = {
      common: {
        emptyField: "<%= i18n.__('common.emptyField') %>",
        minLength: "<%= i18n.__('common.minLength', { minLength: 2 }) %>",
        invalidUrlMessage: "<%= i18n.__('settings.linkMustBeValid') %>",
        invalidEmail: "<%= i18n.__('common.emailMustBeValid') %>",
        invalidPhone: "<%= i18n.__('common.phoneNoLess') %>",
        invalidPhoneWhats: "<%= i18n.__('common.phoneWhatsNoLess') %>",
        invalidAppPercentage: "<%= i18n.__('settings.invalidAppPercentage') %>",
        invalidCode: "<%= i18n.__('settings.invalidCode') %>",
        invalidPassword: "<%= i18n.__('auth.passwordTooShort') %>",
        invalidSmtpHost: "<%= i18n.__('settings.invalidSmtpHost') %>",
        invalidGoogleKey: "<%= i18n.__('settings.invalidGoogleKey') %>",
        invalidPort: "<%= i18n.__('settings.invalidPort') %>",
        clientReferralReward: "<%= i18n.__('settings.clientReferralReward') %>",
        providerReferralReward:
          "<%= i18n.__('settings.providerReferralReward') %>",
        clientReferralRewardGreaterThanZero:
          "<%= i18n.__('settings.clientReferralRewardGreaterThanZero') %>",
        providerReferralRewardGreaterThanZero:
          "<%= i18n.__('settings.providerReferralRewardGreaterThanZero') %>",
        invalidVatTax: "<%= i18n.__('settings.invalidVatTax') %>",
        invalidDistanceMeters:
          "<%= i18n.__('settings.invalidDistanceMeters') %>",
        invalidCallDuration: "<%= i18n.__('settings.callDurationInvalid') %>",
        productExpireAtNotZero: "<%= i18n.__('settings.productExpireAtNotZero') %>",
      },
    };
    try {
      const trimmedValue = input.value.trim();
      const minLength = input.type == 'password' ? 6 : 2;

      const emptyMessage = i18n.common.emptyField;
      const invalidUrlMessage = i18n.common.invalidUrlMessage;
      const invalidEmailMessage = i18n.common.invalidEmail;
      const invalidAppPercentage = i18n.common.invalidAppPercentage;
      const invalidCode = i18n.common.invalidCode;
      const minLengthMessage = i18n.common.minLength.replace(
        '{{minLength}}',
        minLength,
      );
      const feedback = input.nextElementSibling;
      const phoneMessage =
        input.name === 'phone'
          ? i18n.common.invalidPhone
          : input.name === 'phoneWhats'
            ? i18n.common.invalidPhoneWhats
            : '';
      const invalidPasswordMessage = i18n.common.invalidPassword;
      const invalidSmtpHost = i18n.common.invalidSmtpHost;
      const invalidGoogleKey = i18n.common.invalidGoogleKey;
      const invalidVatTax = i18n.common.invalidVatTax;
      const invalidPort = i18n.common.invalidPort;
      const invalidClientReferralReward = i18n.common.clientReferralReward;
      const invalidProviderReferralReward = i18n.common.providerReferralReward;
      const invalidClientReferralRewardGreaterThanZero =
        i18n.common.clientReferralRewardGreaterThanZero;
      const invalidProviderReferralRewardGreaterThanZero =
        i18n.common.providerReferralRewardGreaterThanZero;
      const isValidDistanceMeters = i18n.common.invalidDistanceMeters;
      const invalidCallDuration = i18n.common.invalidCallDuration;
      const productExpireAtNotZero = i18n.common.productExpireAtNotZero;

      const excludedNames = [
        'googleKey',
        'code',
        'host',
        'port',
        'phone',
        'phoneWhats',
        'appPercentage',
        'vatTax',
        'clientReferralReward',
        'providerReferralReward',
        'distanceMeters',
        'callDuration',
        // Numeric duration field: not subject to the "at least N characters"
        // rule. It has its own "must not equal zero" validation below.
        'productExpireAt',
      ];
      const isExcluded = excludedNames.includes(input.name);

      console.log('input.name', input.name, invalidVatTax);

      console.log('isValidDistanceMeters', isValidDistanceMeters);

      if (
        trimmedValue === '' &&
        !['clientReferralReward', 'providerReferralReward'].includes(input.name)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(emptyMessage);
      } else if (input.type === 'email' && !isValidEmail(trimmedValue)) {
        feedback.textContent = invalidEmailMessage;
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidEmailMessage);
      } else if (input.type === 'url' && !isValidUrl(trimmedValue)) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidUrlMessage);
      } else if (
        (input.name === 'phone' || input.name === 'phoneWhats') &&
        !isValidPhone(input.value)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(phoneMessage);
      } else if (input.name === 'clientReferralReward') {
        const rawValue = input.value.trim();
        const value = parseFloat(rawValue);
        let errorMessage = '';

        // Check if the field is empty or contains an invalid number less than 0
        if (rawValue === '' || isNaN(value) || value < 0) {
          errorMessage = invalidClientReferralRewardGreaterThanZero;
        }

        if (errorMessage) {
          feedback.textContent = errorMessage;
          input.classList.add('is-invalid');
          input.style.border = '1px solid red';
          input.setCustomValidity(errorMessage);
        } else {
          feedback.textContent = '';
          input.classList.remove('is-invalid');
          input.style.border = '';
          input.setCustomValidity('');
        }
      } else if (input.name === 'providerReferralReward') {
        const rawValue = input.value.trim();
        const value = parseFloat(rawValue);
        let errorMessage = '';

        // Must be a number and >= 0, and not empty
        if (rawValue === '' || isNaN(value) || value < 0) {
          errorMessage = invalidProviderReferralRewardGreaterThanZero;
        }

        if (errorMessage) {
          feedback.textContent = errorMessage;
          input.classList.add('is-invalid');
          input.style.border = '1px solid red';
          input.setCustomValidity(errorMessage);
        } else {
          feedback.textContent = '';
          input.classList.remove('is-invalid');
          input.style.border = '';
          input.setCustomValidity('');
        }
      } else if (
        input.name === 'distanceMeters' &&
        (input.value < 0 || isNaN(input.value))
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(isValidDistanceMeters);
      } else if (input.name === 'appPercentage' && input.value < 0) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidAppPercentage);
      } else if (
        input.name === 'vatTax' &&
        (input.value < 0 || input.value > 100)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidVatTax);
      } else if (
        input.name === 'callDuration' &&
        (input.value < 1 || input.value > 1440)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidCallDuration);
      } else if (
        input.name === 'productExpireAt' &&
        (isNaN(Number(input.value)) || Number(input.value) === 0)
      ) {
        feedback.textContent = productExpireAtNotZero;
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(productExpireAtNotZero);
      } else if (
        input.name === 'port' &&
        (isNaN(parseInt(input.value, 10)) ||
          parseInt(input.value, 10) < 1 ||
          parseInt(input.value, 10) > 65535)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidPort);
      } else if (
        input.name === 'code' &&
        (input.value.length < 4 || input.value.length > 6)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidCode);
      } else if (input.name === 'host' && !isValidSmtpHost(input.value)) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidSmtpHost);
      } else if (
        input.name === 'googleKey' &&
        !isValidGoogleApiKey(input.value)
      ) {
        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(invalidGoogleKey);
      } else if (!isExcluded && trimmedValue.length < minLength) {
        feedback.textContent =
          input.type === 'password' ? invalidPasswordMessage : minLengthMessage;

        input.classList.add('is-invalid');
        input.style.border = '1px solid red';
        input.setCustomValidity(minLengthMessage);
      } else {
        input.classList.remove('is-invalid');
        input.style.border = '';
        input.setCustomValidity('');
      }

      input.reportValidity();

      function isValidUrl(value) {
        const urlPattern = /^(https?:\/\/)([\w.-]+)+(:\d+)?(\/[\w./?=#-]*)?$/;
        return urlPattern.test(value);
      }

      function isValidPhone(value) {
        console.log('value', value);
        const phonePattern = /^\d{10,10}$/;
        return phonePattern.test(value);
      }

      function isValidEmail(value) {
        const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return emailPattern.test(value);
      }

      function isValidSmtpHost(value) {
        const smtpHostPattern = /^(smtp|mail)\.[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
        return smtpHostPattern.test(value);
      }

      function isValidGoogleApiKey(value) {
        const apiKeyPattern = /^AIza[0-9A-Za-z-_]{35}$/;
        return apiKeyPattern.test(value);
      }
    } catch (error) {
      console.error(error);
    }
  }
  const loadFile = function (event) {
    var outputId = event.path[0].id;
    outputId = 'output-' + outputId;

    var outputs = document.getElementById(outputId);
    outputs.src = URL.createObjectURL(event.target.files[0]);
    outputs.onload = function () {
      URL.revokeObjectURL(outputs.src); // free memory
    };
  };

  $(document).on('click', '.editSocial', function () {
    //get valusauthor
    var socialMediaId = $(this).data('social-socialmediaid');
    var linkName = $(this).data('social-linkname');
    var linkUrl = $(this).data('social-linkurl');
    var linkImage = $(this).data('social-linkimage');
    //set values in modal inputs
    $("input[name='socialMediaId']").val(socialMediaId);
    $("input[name='edit_linkName']").val(linkName);
    $("input[name='edit_linkUrl']").val(linkUrl);
    $('#output-img-editImage').attr('src', linkImage);
  });

  $(document).on('click', '.editAbout', function () {
    //get valusauthor
    var id = $(this).data('about-id');
    var name = $(this).data('about-name');
    var desc = $(this).data('about-desc');
    var image = $(this).data('about-image');
    //set values in modal inputs
    $("input[name='about_id']").val(id);
    $("input[name='edit_name']").val(name);
    $("textarea[name='edit_desc']").val(desc);
    //    $('#output-img-editImageAbout').attr('src',  '{{ asset('assets/uploads/intros/') }}' + '/' + image);
  });

  $(document).on('click', '.hyparpayEditModal', function () {
    //get valusauthor
    var id = $(this).data('hyperpay-id');
    var name = $(this).data('hyperpay-name');
    var type = $(this).data('hyperpay-type');
    var entity_id = $(this).data('hyperpay-entity_id');
    var image = $(this).data('hyperpay-image');
    var status = $(this).data('hyperpay-status');

    $('#typeHyparpay').text(type);

    if (status == 'active') {
      $('#type').attr('checked', true);
    }
    //set values in modal inputs
    $("input[name='hyparpay_id']").val(id);
    $("input[name='name']").val(name);
    $("input[name='type']").val(type);
    $("input[name='entity_id']").val(entity_id);
    // $('#output-img-editImageHyperpay').attr('src',  '{{ asset('assets/uploads/hyperpays/') }}' + '/' + image);
  });

  if (typeof CKEDITOR !== 'undefined') {
    CKEDITOR.disableAutoInline = true;
  }

  function CKEDITORRtl(name) {
    if (typeof CKEDITOR === 'undefined') return;
    const source = Array.from(document.getElementsByName(name)).find((element) => (
      element.tagName === 'TEXTAREA'
      && !element.closest('[data-settings-module]')
    ));
    if (!source) return;
    CKEDITOR.replace(source, {
      filebrowserUploadMethod: 'form',
      contentsLangDirection: 'rtl',
      language: 'ar',
      removePlugins: 'image,flash,iframe,smiley,about',
    });
  }

  function CKEDITORLtr(name) {
    if (typeof CKEDITOR === 'undefined') return;
    const source = Array.from(document.getElementsByName(name)).find((element) => (
      element.tagName === 'TEXTAREA'
      && !element.closest('[data-settings-module]')
    ));
    if (!source) return;
    CKEDITOR.replace(source, {
      filebrowserUploadMethod: 'form',
      contentsLangDirection: 'ltr',
      language: 'ar',
      removePlugins: 'image,flash,iframe,smiley,about',
    });
  }

  CKEDITORRtl('about[ar]');
  CKEDITORLtr('about[en]');
  CKEDITORRtl('title[ar]');
  CKEDITORLtr('title[en]');
  CKEDITORRtl('description[ar]');
  CKEDITORLtr('description[en]');
  CKEDITORRtl('terms[ar]');
  CKEDITORLtr('terms[en]');
  CKEDITORRtl('privacy[ar]');
  CKEDITORLtr('privacy[en]');

  $(document).ready(function () {
    $(document).on('submit', '.edit', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";
      let objData = new FormData(this);

      ajaxUpload($(this), objData, 'uploadWithImage', confirm);
    });

    $(document).on('submit', '.edit-order', function (e) {
      e.preventDefault();

      // Front-end guard: all order-setting durations must be positive (cannot equal 0).
      let orderSettingsValid = true;
      $(this)
        .find('input[name="providerResponseTime"], input[name="confirmReceiveOrderTime"], input[name="settlementOrdersTime"], input[name="nonePaymentOrderTime"], input[name="paymentAfterAcceptTime"]')
        .each(function () {
          const val = parseInt($(this).val(), 10);
          if (!Number.isInteger(val) || val < 1) {
            $(this).addClass('is-invalid');
            orderSettingsValid = false;
          } else {
            $(this).removeClass('is-invalid');
          }
        });

      if (!orderSettingsValid) return;

      let confirm = "<%= i18n.__('common.edit') %>";
      let objData = new FormData(this);

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.editAbout', function (e) {
      e.preventDefault();

      const confirm = "<%= i18n.__('common.edit') %>";

      const objData = new FormData(this);

      ajaxUpload($(this), objData, 'uploadWithImage', confirm);
    });

    $(document).on('submit', '.editTerms', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      const objData = new FormData(this);

      ajaxUpload($(this), objData, 'uploadWithImage', confirm);
    });

    $(document).on('submit', '.edit-api', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      console.log('this', $(this));
      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.termsCondition', function (e) {
      e.preventDefault();

      let confirm = "<%= i18n.__('common.edit') %>";

      const objData = new FormData(this);

      ajaxUpload($(this), objData, 'uploadWithImage', confirm);
    });

    $(document).on('submit', '.edit-code', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.edit-smtp', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.edit-home', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.edit-notification', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.edit-auction', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      ajaxUpload($(this), {}, 'uploadWithOutImage', confirm);
    });

    $(document).on('submit', '.editAck-Terms', function (e) {
      e.preventDefault();
      let confirm = "<%= i18n.__('common.edit') %>";

      const acknowledgementAr = String(
        $('textarea[name="acknowledgement[ar]"]').val(),
      );

      const acknowledgementEn = String(
        $('textarea[name="acknowledgement[en]"]').val(),
      );

      if (
        !acknowledgementAr.trim().length ||
        !acknowledgementEn.trim().length
      ) {
        $('this').remove('was-validated');
      } else {
        $('this').add('was-validated');
      }
    });
  });
</script>
