/**
 * This model is used by gallery/photo.blade.php, to handle comments and individual photo actions.
 * @constructor
 */
function PhotoViewModel(urls) {
    this.el = '#photo-app';

    this.data = {
        is_reply_form_loading: false,
        reply_comment_id: 0
    };

    this.computed = {
        replyFormStyle: function()
        {
            return {
                'display': this.is_reply_form_loading ? 'none' : 'block'
            };
        }
    };

    this.methods = {
        init: function() {
            var self = this;

            // Load the right comment reply form
            $('#comment-reply-modal').on('show.bs.modal', function (event) {
                var url = urls.reply_comment_form.replace(/-1$/, self.reply_comment_id);
                $.get(url, function(result)
                {
                    $('#comment-reply-form-content').html(result);
                    initTinyMce('#comment-text-reply');
                    self.is_reply_form_loading = false;
                });
            });

            $('#comment-reply-modal').on('hide.bs.modal', function (event) {
                tinymce.remove('#comment-text-reply');
            });
        },
        postCommentReply: function() {
            var form = $('form', '#comment-reply-form-content');
            var formUrl = $(form).attr('action');

            // Seems like the TinyMCE editor in the BS modal does not persist back to the textarea correctly - so do
            // this manually (bit of a hack!)
            $('#comment-text-reply', form).html(tinymce.get('comment-text-reply').getContent());

            var formData = form.serialize();

            $.post(formUrl, formData, function(result)
            {
                if (result.redirect_url)
                {
                    window.location = result.redirect_url;
                }
                else
                {
                    tinymce.remove('#comment-text-reply');
                    $('#comment-reply-form-content').html(result);
                    initTinyMce('#comment-text-reply');
                }
            });
        },
        replyToComment: function(e) {
            var replyButton = $(e.target).closest('.photo-comment');
            this.reply_comment_id = replyButton.data('comment-id');

            this.is_reply_form_loading = true;
            $('#comment-reply-modal').modal('show');

            e.preventDefault();
            return false;
        }
    };
}