/* Minification failed. Returning unminified contents.
(85,71-72): run-time error JS1195: Expected expression: >
(85,99-100): run-time error JS1004: Expected ';': )
(114,3-4): run-time error JS1002: Syntax error: }
(116,29-30): run-time error JS1004: Expected ';': {
(229,1-2): run-time error JS1002: Syntax error: }
 */
$(document).ready(function () {
  function detectDeviceType(userAgent) {
    if (/Android/i.test(userAgent)) {
      return "Android";
    } else if (/webOS/i.test(userAgent)) {
      return "webOS";
    } else if (/iPhone|iPad|iPod/i.test(userAgent)) {
      return "iOS";
    } else if (/BlackBerry/i.test(userAgent)) {
      return "BlackBerry";
    } else if (/Windows Phone/i.test(userAgent)) {
      return "Windows Phone";
    } else if (/Windows/i.test(userAgent)) {
      return "Windows";
    } else if (/Mac OS/i.test(userAgent)) {
      return "Mac";
    } else if (/Linux/i.test(userAgent)) {
      return "Linux";
    } else {
      return "Unknown";
    }
  }

  function detectBrowserAndVersion(userAgent) {
    var browser = "Unknown Browser";
    var version = "Unknown Version";

    if (/Edg/i.test(userAgent)) {
      browser = "Microsoft Edge";
      match = userAgent.match(/Edg\/([\d.]+)/);
      if (Array.isArray(match) && match.length > 0) {
        version = match[1];
      }
    } else if (/Chrome/i.test(userAgent)) {
      browser = "Google Chrome";
      match = userAgent.match(/Chrome\/([\d.]+)/);
      if (Array.isArray(match) && match.length > 0) {
        version = match[1];
      }
    } else if (/Safari/i.test(userAgent) && /Version/i.test(userAgent)) {
      browser = "Apple Safari";
      match = userAgent.match(/Version\/([\d.]+)/);
      if (Array.isArray(match) && match.length > 0) {
        version = match[1];
      }
    } else if (/Firefox/i.test(userAgent)) {
      browser = "Mozilla Firefox";
      match = userAgent.match(/Firefox\/([\d.]+)/);
      if (Array.isArray(match) && match.length > 0) {
        version = match[1];
      }
    } else if (/MSIE|Trident/i.test(userAgent)) {
      browser = "Internet Explorer";
      if (/MSIE/i.test(userAgent)) {
        match = userAgent.match(/MSIE ([\d.]+)/);
        if (Array.isArray(match) && match.length > 0) {
          version = match[1];
        }
      } else {
        match = userAgent.match(/rv:([\d.]+)/);
        if (Array.isArray(match) && match.length > 0) {
          version = match[1];
        }
      }
    }

    return {
      browser: browser,
      version: version,
    };
  }

  function createFeedback(value) {
    var container = $(this);

    var userAgent = navigator.userAgent;
    var deviceType = detectDeviceType(userAgent);
    var browserInfo = detectBrowserAndVersion(userAgent);

    var pageName = container.attr("data-page-name");
    var pageUrl = window.location.href;
    var sessionId = container.attr("data-session-id");
    var userIPAddress = container.attr("data-user-ip-address");

    var userType = methodist.analytics.getManager().state.find(entry => entry.event === "pageload").visitor.visitor_traffic_type;

    var token = container.find('input[name="__RequestVerificationToken"]').val();

    $.ajax({
      url: container.attr("data-create-feedback-url"),
      data: {
        __RequestVerificationToken: token,
        PageName: pageName,
        PageUrl: pageUrl,
        SessionID: sessionId,
        DeviceType: deviceType,
        IPAddress: userIPAddress,
        BrowserType: browserInfo.browser,
        BrowserVersion: browserInfo.version,
        FeedbackText: ' ',
        IconSelection: value,
        UserType: userType
      },
      type: "POST",
      success: function (response) {
        container.find('[name="fieldDataId_value"]').val(response.FieldDataId);
        container.find('[name="formEntryId_value"]').val(response.FormEntryId);
        container.find('.feedback-form').show();
      },
      error: function (request) {
        console.error("There was an issue submitting the feedback");
      }
    })
  }

  function updateFeedback() {
    var container = $(this);

    var token = container.find('input[name="__RequestVerificationToken"]').val();

    var fieldDataId = container.find('[name="fieldDataId_value"]').val();
    var formEntryId = container.find('[name="formEntryId_value"]').val();

    $.ajax({
      url: container.attr("data-update-feedback-url"),
      data: {
        __RequestVerificationToken: token,
        feedbackText: container.find('.feedback-text').val() || '',
        fieldDataId: fieldDataId,
        formEntryId: formEntryId
      },
      type: "POST",
      success: function (response) {
        container.find('.feedback-thank-you-message').show();
        container.find('.feedback-question').hide();
        container.find('.feedback-form').hide();
      },
      error: function (request) {
        console.error("There was an issue submitting the feedback");
      }
    })
  }

  function checkInput() {
    var container = $(this);

    var input = container.find(".feedback-text").val();
    var submitBtn = container.find(".feedback-submit-button");

    if (input.trim() !== '') {
      submitBtn.css('display', 'block').attr('aria-hidden', 'false');
    }
    else {
      submitBtn.css('display', 'none').attr('aria-hidden', 'true');
    }

  }

  $(".feedback-container").each(function (_, element) {
    var container = $(element);
    container.find(".feedback-submit-button").css('display', 'none').attr('aria-hidden', 'true');

    container.find(".yes-btn").on("click", function () {
      createFeedback.call(element, "yes");
      container.attr("data-selection", "thumbs up");
      container.find("#icon-yes").css('fill', 'currentColor');
      container.find("#icon-yes").css('stroke', 'currentColor');
      container.find(".yes-btn").css('pointer-events', 'none');
      container.find(".no-btn").css('pointer-events', 'none');

      methodist.analytics.pushEvent(
        "interface_interactions",
        {
          component: {
            sc_component_name: "feedback question",
            sc_component_title: container.find(".feedback-question-text").text(),
            sc_item_id: container.attr("data-item-id"),
            sc_rendering_id: container.attr("data-rendering-id"),
            interaction_item: "thumbs up"
          }
        }
      );
    });

    container.find(".no-btn").on("click", function () {
      createFeedback.call(element, "no");
      container.attr("data-selection", "thumbs down");
      container.find("#icon-no").css('fill', 'currentColor');
      container.find("#icon-no").css('stroke', 'currentColor');
      container.find(".no-btn").css('pointer-events', 'none');
      container.find(".yes-btn").css('pointer-events', 'none');

      methodist.analytics.pushEvent(
        "interface_interactions",
        {
          component: {
            sc_component_name: "feedback question",
            sc_component_title: container.find(".feedback-question-text").text(),
            sc_item_id: container.attr("data-item-id"),
            sc_rendering_id: container.attr("data-rendering-id"),
            interaction_item: "thumbs down"
          }
        }
      );
    });

    container.find(".feedback-submit-button").on("click", function () {
      updateFeedback.call(element);

      methodist.analytics.pushEvent(
        "interface_interactions",
        {
          component: {
            sc_component_name: "feedback question",
            sc_component_title: container.find(".feedback-question-text").text(),
            sc_item_id: container.attr("data-item-id"),
            sc_rendering_id: container.attr("data-rendering-id"),
            interaction_item: container.attr("data-selection"),
            interaction_value: container.find('.feedback-text').val() || ""
          }
        }
      );
    });

    container.find(".feedback-text").on("keyup", function () {
      checkInput.call(element)
    })
  })
});
;
