import Ember from 'ember';
import setScrollClassName from 'ghost/utils/set-scroll-classname';

export default Ember.Component.extend({
    tagName: 'section',
    classNames: ['gh-view'],

    scheduleAfterRender: function () {
        Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent);
    },

    didInsertElement: function () {
        this.scheduleAfterRender();
    },

    afterRenderEvent: function () {
        var $previewViewPort = this.$('.js-entry-preview-content');

        // cache these elements for use in other methods
        this.set('$previewViewPort', $previewViewPort);
        this.set('$previewContent', this.$('.js-rendered-markdown'));

        $previewViewPort.on('scroll', Ember.run.bind($previewViewPort, setScrollClassName, {
            target: this.$('.js-entry-preview'),
            offset: 10
        }));
    },

    willDestroyElement: function () {
        // removes scroll handlers from the view
        this.get('$previewViewPort').off('scroll');
    },

    // updated when gh-ed-editor component scrolls
    editorScrollInfo: null,
    // updated when markdown is rendered
    height: null,

    // HTML Preview listens to scrollPosition and updates its scrollTop value
    // This property receives scrollInfo from the textEditor, and height from the preview pane, and will update the
    // scrollPosition value such that when either scrolling or typing-at-the-end of the text editor the preview pane
    // stays in sync
    scrollPosition: Ember.computed('editorScrollInfo', 'height', function () {
        if (!this.get('editorScrollInfo')) {
            return 0;
        }

        var scrollInfo = this.get('editorScrollInfo'),
            previewHeight = this.get('$previewContent').height() - this.get('$previewViewPort').height(),
            previewPosition,
            ratio;

        ratio = previewHeight / scrollInfo.diff;
        previewPosition = scrollInfo.top * ratio;

        return previewPosition;
    })
});