/**
 * HelpBubble helper functions, for help bubbles with lots of arguments or logic
 */
(function (context, $) {

  "use strict";

  context.JK = context.JK || {};
  var helpBubble = {};
  var rest = new context.JK.Rest();
  context.JK.HelpBubbleHelper = helpBubble;
  var logger = context.JK.logger;
  var jamTrackGuideTimeout = null;

  var defaultScoreBreakDownOptions = {positions: ['right', 'top', 'bottom', 'left'], width:'600px', closeWhenOthersOpen: true };
  helpBubble.scoreBreakdown = function($element, isCurrentUser, full_score, myAudioLatency, otherAudioLatency, internetScore, options) {
    options = options || {};
    options = $.extend({}, defaultScoreBreakDownOptions, options)
    if(isCurrentUser) {
      context.JK.helpBubble($element, 'musician-score-self',
        {full_score: full_score ? Math.round(full_score / 2) : null, my_gear_latency: myAudioLatency, their_gear_latency: otherAudioLatency, internet_latency: internetScore},
        options);
    } else {
      context.JK.helpBubble($element, 'musician-score-count',
      {full_score: full_score ? Math.round(full_score / 2) : null, my_gear_latency: myAudioLatency, their_gear_latency: otherAudioLatency, internet_latency: internetScore},
      options);
    }
  }

  function bigHelpOptions(options) {
    return {positions: options.positions, offsetParent: options.offsetParent,
      spikeGirth: 15,
      spikeLength: 20,
      fill: 'white',
      cornerRadius:8,
      strokeWidth: 2,
      cssStyles: {
      fontWeight:'bold',
        fontSize: '20px',
        backgroundColor:'transparent',
        color:'#ed3618'}}
  }

  function clearJamTrackGuideTimeout() {
    if(jamTrackGuideTimeout) {
      clearTimeout(jamTrackGuideTimeout);
      jamTrackGuideTimeout = null;
    }
  }

  function jamTrackGuide(callback) {
    if(gon.isNativeClient) {
      context.JK.app.user().done(function(user) {
        if(user.show_jamtrack_guide) {
          clearJamTrackGuideTimeout();
          jamTrackGuideTimeout = setTimeout(function() {
            callback()
          }, 1000)

        }
      })
    }
  }

  helpBubble.rotateJamTrackLandingBubbles = function($preview, $video, $ctaButton, $alternativeCta) {
    $(window).on('load', function() {
      setTimeout(function() {
        helpBubble.jamtrackLandingPreview($preview, $preview.offsetParent())

        setTimeout(function() {
          helpBubble.jamtrackLandingVideo($video, $video.offsetParent())

          setTimeout(function() {
            helpBubble.jamtrackLandingCta($ctaButton, $alternativeCta)
          }, 11000); // 5 seconds on top of 6 second show time of bubbles
        }, 11000); // 5 seconds on top of 6 second show time of bubbles
      }, 1500)


    })
  }

  helpBubble.clearJamTrackGuide = clearJamTrackGuideTimeout;

  helpBubble.jamtrackGuideTile = function ($element, $offsetParent) {
    jamTrackGuide(function() {
      context.JK.prodBubble($element, 'jamtrack-guide-tile', {}, bigHelpOptions({positions:['top'], offsetParent: $offsetParent}))
    })
  }

  helpBubble.jamtrackGuidePrivate = function ($element, $offsetParent) {
    jamTrackGuide(function() {
      context.JK.prodBubble($element, 'jamtrack-guide-private', {}, bigHelpOptions({positions:['right'], offsetParent: $offsetParent}))
    })
  }

  helpBubble.jamtrackGuideSession = function ($element, $offsetParent) {
    jamTrackGuide(function() {
      context.JK.prodBubble($element, 'jamtrack-guide-session', {}, bigHelpOptions({positions:['left'], offsetParent: $offsetParent}))
    })
  }

  helpBubble.jamtrackLandingPreview = function($element, $offsetParent) {
    context.JK.prodBubble($element, 'jamtrack-landing-preview', {}, bigHelpOptions({positions:['right'], offsetParent: $offsetParent}))
  }

  helpBubble.jamtrackLandingVideo = function($element, $offsetParent) {
    context.JK.prodBubble($element, 'jamtrack-landing-video', {}, bigHelpOptions({positions:['left'], offsetParent: $offsetParent}))
  }

  helpBubble.jamtrackLandingCta = function($element, $alternativeElement) {
    if ($element.visible()) {
      context.JK.prodBubble($element, 'jamtrack-landing-cta', {}, bigHelpOptions({positions:['left']}))
    }
    else {
      context.JK.prodBubble($alternativeElement, 'jamtrack-landing-cta', {}, bigHelpOptions({positions:['right']}))
    }
  }

  helpBubble.jamtrackBrowseBand = function($element, $offsetParent) {
    return context.JK.prodBubble($element, 'jamtrack-browse-band', {}, bigHelpOptions({positions:['top'], offsetParent: $offsetParent}))
  }

  helpBubble.jamtrackBrowseMasterMix = function($element, $offsetParent) {
    return context.JK.prodBubble($element, 'jamtrack-browse-master-mix', {}, bigHelpOptions({positions:['top'], offsetParent: $offsetParent}))
  }

  helpBubble.jamtrackBrowseCta = function($element, $offsetParent) {
    return context.JK.prodBubble($element, 'jamtrack-browse-cta', {}, bigHelpOptions({positions:['top'], offsetParent: $offsetParent}))
  }

})(window, jQuery);