var defaultUrl = "http://localhost:9999"
var elementSelector = ".article--content pre:not(.preserve)"

// Retrieve the selected URL from the influxdb_url session cookie
function getUrl() {
  var currentUrl = Cookies.get('influxdb_url')
  if (typeof currentUrl == 'undefined' ) {
    return defaultUrl
  } else {
    return currentUrl
  }
}

// Retrieve the previously selected URL from the influxdb_prev_url session cookie
// This is used to update URLs whenever you switch between browser tabs
function getPrevUrl() {
  var prevUrl = Cookies.get('influxdb_prev_url')
  if (typeof prevUrl == 'undefined' ) {
    return defaultUrl
  } else {
    return prevUrl
  }
}

// Iterate through code blocks and update InfluxDB urls
function updateUrls(currentUrl, newUrl) {
  if (typeof currentUrl != newUrl) {
    $(elementSelector).each(function() {
      $(this).html($(this).html().replace(currentUrl,  newUrl));
    });
  }
}

// Append the URL selector button to each codeblock with an InfluxDB URL
function appendUrlSelector(currentUrl) {
  $(elementSelector).each(function() {
    var code = $(this).html()
    if (code.includes(currentUrl)) {
      $(this).after("<div class='select-url'><a class='url-trigger' href='#'>Cloud or OSS?</a></div>")
      $('.select-url').fadeIn(400)
    }
  });
}

// Toggle the URL selector modal window
function toggleModal() {
  $(".modal").fadeToggle(200).toggleClass("open")
}

// Set the selected URL radio button to :checked
function setRadioButton(currentUrl) {
  $('input[name="influxdb-loc"][value="' + currentUrl + '"]').prop("checked", true)
}

// Store the InfluxDB URL session cookies – influxdb_url and influxdb_prev_url
function storeUrl(newUrl, prevUrl) {
  Cookies.set('influxdb_prev_url', prevUrl)
  Cookies.set('influxdb_url', newUrl)
}

// Preserver URLs in codeblocks that come just after or are inside a div
// with the class, .keep-url
function addPreserve() {
  $('.keep-url').each(function () {
    // For code blocks with no syntax highlighting
    $(this).next('pre').addClass('preserve')
    // For code blocks with syntax highlighting
    $(this).next('.highlight').find('pre').addClass('preserve')
    // For code blocks inside .keep-url div
    // Special use case for codeblocks generated from yaml data / frontmatter
    $(this).find('pre').addClass('preserve')
  })
}

// Update URLs when selected in the modal
$('input[name="influxdb-loc"]').change(function() {
  var newUrl = $(this).val()
  updateUrls(getUrl(), newUrl)
  storeUrl(newUrl, getUrl())
})

// Add the preserve tag to code blocks that shouldn't be udpated
addPreserve()

// Update URLs on load
updateUrls(defaultUrl, getUrl())

// Append URL selector buttons to code blocks
appendUrlSelector(getUrl())

// Set active radio button on page load
setRadioButton(getUrl())

// Update URLs whenever you focus on the browser tab
$(window).focus(function() {
  updateUrls(getPrevUrl(), getUrl())
  setRadioButton(getUrl())
});

// Toggle modal window on click
$("#modal-close, .modal-overlay, .url-trigger").click(function(e) {
  e.preventDefault()
  toggleModal()
})

// Show the feature callout on page load
if ( Cookies.get('influxdb_url_selector_seen') != 'true' ) {
  $('#callout-url-selector').fadeIn(300).removeClass('start-position')
}

// Set feature cookie when the button is clicked
$('button.url-trigger, #callout-url-selector .close').click(function() {
  if ( Cookies.get('influxdb_url_selector_seen') != 'true') {
    Cookies.set('influxdb_url_selector_seen', 'true')
    $('#callout-url-selector').fadeOut(200)
  }
})