import Ember from 'ember';

export default (function() {
  // NOTE: I could have probably extract fixed positioning from
  //       Tailing, but then I would need to parametrize positionElement
  //       function to make it flexible to handle both cases. In that
  //       situation I prefer a bit less DRY code over simplicity of
  //       the calculations.

  function ToTop(window, element_selector, container_selector) {
    this.window = window;
    this.element_selector = element_selector;
    this.container_selector = container_selector;
    this.position = this.window.scrollTop();
    this.window.scroll(() => {
      return Ember.run.throttle(this, this.onScroll, [], 200, false);
    });
    return this;
  }

  ToTop.prototype.element = function() {
    return $(this.element_selector);
  };

  ToTop.prototype.container = function() {
    return $(this.container_selector);
  };

  ToTop.prototype.onScroll = function() {
    return this.positionElement();
  };

  ToTop.prototype.positionElement = function() {
    var container, containerHeight, element, max, offset, windowHeight;
    element = this.element();
    container = this.container();
    if (element.length === 0) {
      return;
    }
    containerHeight = container.outerHeight();
    windowHeight = this.window.height();
    offset = container.offset().top + containerHeight - (this.window.scrollTop() + windowHeight);
    max = containerHeight - windowHeight;
    if (offset > max) {
      offset = max;
    }
    if (offset > 0) {
      return element.css({
        bottom: offset + 4
      });
    } else {
      return element.css({
        bottom: 2
      });
    }
  };

  return ToTop;

})();