/* global window, document */
(function () {
  window.dataLayer = window.dataLayer || [];

  function pageMeta(extra) {
    return Object.assign({
      page_path: window.location.pathname + window.location.search,
      page_title: document.title,
    }, extra || {});
  }

  function track(eventName, params) {
    window.dataLayer.push(Object.assign({ event: eventName }, pageMeta(params)));
  }

  window.bastionAnalytics = {
    track,
    primaryCtaClick: function (ctaLabel, ctaLocation) {
      track('primary_cta_click', { cta_label: ctaLabel, cta_location: ctaLocation });
    },
    leadFormView: function (leadSource) {
      track('lead_form_view', { lead_source: leadSource || 'contact_section' });
    },
    leadFormStart: function (leadSource) {
      track('lead_form_start', { lead_source: leadSource || 'contact_section' });
    },
    leadFormSubmitSuccess: function (formData, leadSource) {
      track('lead_form_submit_success', {
        lead_source: leadSource || 'contact_section',
        company_size: formData && formData.role ? formData.role : undefined,
        tools_used: formData && formData.tools ? formData.tools : undefined,
        budget_range: formData && formData.budget ? formData.budget : undefined,
      });
    },
    leadFormSubmitError: function (errorMessage, leadSource) {
      track('lead_form_submit_error', {
        lead_source: leadSource || 'contact_section',
        error_message: errorMessage || 'unknown',
      });
    },
  };
}());
