'use strict';

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

require('./_commonjsHelpers-06173234.js');
require('./_to-object-329a650b.js');
require('./es6.string.iterator-cc0bbaa4.js');
require('./_library-dd23b178.js');
require('./_iter-detect-60b2f026.js');
require('./core.get-iterator-method-f62321d4.js');
require('./_object-pie-68c5bcbc.js');
var _extends = require('./extends-60837c34.js');
require('./web.dom.iterable-a0e279c1.js');
var React = require('react');
var React__default = _interopDefault(React);
var index = require('./index-8bf6c863.js');
var PropTypes = require('prop-types');
var PropTypes__default = _interopDefault(PropTypes);
require('./isSymbol-04666465.js');
var debounce = require('./debounce-eb287781.js');
var main = require('./main-02daeefe.js');
var slicedToArray = require('./slicedToArray-8f385299.js');
require('./stringify-7c5aff47.js');
require('./asyncToGenerator-533d476a.js');
require('./_set-species-f92c67c5.js');
var Segment = require('./Segment.js');
var Beam = require('./Beam.js');

var DFPAdSlot = function DFPAdSlot(_ref) {
  var adUnit = _ref.adUnit,
      sizeMapping = _ref.sizeMapping,
      className = _ref.className,
      slotId = _ref.slotId,
      sizes = _ref.sizes,
      _ref$targeting = _ref.targeting,
      targeting = _ref$targeting === undefined ? {} : _ref$targeting,
      _ref$refreshFlag = _ref.refreshFlag,
      refreshFlag = _ref$refreshFlag === undefined ? true : _ref$refreshFlag,
      checkIsAdFound = _ref.checkIsAdFound,
      _ref$setStickyAd = _ref.setStickyAd,
      setStickyAd = _ref$setStickyAd === undefined ? function () {} : _ref$setStickyAd;

  var _useState = React.useState(false),
      _useState2 = slicedToArray._slicedToArray(_useState, 2),
      adRendered = _useState2[0],
      setAdRendered = _useState2[1];

  var _useState3 = React.useState(false),
      _useState4 = slicedToArray._slicedToArray(_useState3, 2),
      adRefreshable = _useState4[0],
      setAdRefreshable = _useState4[1];

  var _useState5 = React.useState(false),
      _useState6 = slicedToArray._slicedToArray(_useState5, 2),
      adHasFocus = _useState6[0],
      setAdHasFocus = _useState6[1];

  targeting.ksg = typeof window !== 'undefined' ? window.Krux.segments : null;
  targeting.kuid = typeof window !== 'undefined' ? window.Krux.user : null;

  var adTargeting = _extends._extends({}, targeting, { hostname: typeof window !== 'undefined' ? window.location.hostname : null });

  var handleVisibilityChange = debounce.debounce_1(function (_ref2) {
    var event = _ref2.event;

    if (event.inViewPercentage <= 0) {
      setAdRefreshable(false);
    } else {
      setAdRefreshable(true);
    }
  }, 500);

  React.useEffect(function () {
    // Setting hostname into AD targetting
    if (window && window.location && window.location.hostname) {
      adTargeting.hostname = window.location.hostname;
    }
  }, [adTargeting]);

  var _useState7 = React.useState(null),
      _useState8 = slicedToArray._slicedToArray(_useState7, 2),
      eventData = _useState8[0],
      setEventData = _useState8[1];

  return React__default.createElement(
    'div',
    { className: className, style: { textAlign: 'center' } },
    React__default.createElement(index.lib_2, {
      style: { marginBottom: '1rem' },
      slotId: slotId,
      sizes: sizes,
      adUnit: adUnit,
      sizeMapping: sizeMapping,
      targetingArguments: adTargeting,
      onSlotIsViewable: function onSlotIsViewable(e) {
        setStickyAd(true);
        Beam.report_beam_ad('Impression', main.main_16, eventData.cID, eventData.lID, eventData.campID, eventData.adSize, eventData.slot_id);
        Segment.adViewed(eventData.domain, eventData.advertiserId, eventData.campID, eventData.cID, eventData.lID, eventData.adSize, eventData.isEmpty, eventData.sourceAgnosticCreativeId, eventData.sourceAgnosticLineItemId);
      },
      onSlotRender: function onSlotRender(eventData) {
        // Updating the condition to remove the dependency on static slotId.
        if (eventData && eventData.event && checkIsAdFound && checkIsAdFound !== null) {
          if (eventData.event.size !== null && eventData.event.size.length) {
            checkIsAdFound(true, eventData);
          } else {
            checkIsAdFound(false, eventData);
          }
        }

        setAdRendered(true);
        if (eventData && eventData.event) {
          var cID = eventData.event.creativeId;
          var lID = eventData.event.lineItemId;
          var campID = eventData.event.campaignId;
          var adSize = eventData.event.size && eventData.event.size.length > 1 ? eventData.event.size[0] + 'x' + eventData.event.size[1] : '';
          var slot_id = eventData.slotId ? eventData.slotId : '';
          var isEmpty = eventData.event.isEmpty;
          var sourceAgnosticCreativeId = eventData.event.sourceAgnosticCreativeId;
          var sourceAgnosticLineItemId = eventData.event.sourceAgnosticLineItemId;
          var advertiserId = eventData.event.advertiserId;
          var domain = typeof window !== 'undefined' && window.location ? window.location.hostname : '';

          setEventData({
            cID: cID,
            lID: lID,
            campID: campID,
            adSize: adSize,
            slot_id: slot_id,
            isEmpty: isEmpty,
            sourceAgnosticCreativeId: sourceAgnosticCreativeId,
            sourceAgnosticLineItemId: sourceAgnosticLineItemId,
            advertiserId: advertiserId,
            domain: domain
          });

          var slot_div = document.getElementById(eventData.slotId);
          if (slot_div) {
            slot_div.addEventListener('mouseenter', function () {
              var timeoutId = slot_div.getAttribute('timeoutId');
              clearTimeout(timeoutId);
              slot_div.setAttribute('hasFocus', 'yes');
            });

            slot_div.addEventListener('mouseleave', function () {
              var timeoutId = setTimeout(function () {
                slot_div.setAttribute('hasFocus', 'no');
              }, 60);
              slot_div.setAttribute('timeoutId', timeoutId);
            });

            document.addEventListener('visibilitychange', function () {
              if (!document.hidden) {
                return;
              }

              var hasFocus = slot_div.getAttribute('hasFocus');
              if (hasFocus == 'yes' && document.hidden) {
                slot_div.setAttribute('hasFocus', 'no');
                Beam.report_beam_ad('Click', main.main_16, cID, lID, campID, adSize, slotId);
                Segment.adClicked(domain, advertiserId, campID, cID, lID, adSize, isEmpty, sourceAgnosticCreativeId, sourceAgnosticLineItemId);
              }
            });
          } else {
            console.error('slot div not found:', slotId);
          }
        }
      },
      onSlotVisibilityChanged: handleVisibilityChange,
      shouldRefresh: function shouldRefresh(event) {
        if (adRendered && adRefreshable && refreshFlag) return true;else return false;
      }
    })
  );
};

DFPAdSlot.propTypes = {
  adUnit: PropTypes__default.string.isRequired,
  slotId: PropTypes__default.string,
  className: PropTypes__default.string,
  sizeMapping: PropTypes__default.array,
  sizes: PropTypes__default.array
};

module.exports = DFPAdSlot;
