/*
 * Copyright 2012 LinkedIn Corp.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

$.namespace('azkaban');

var logModel;
azkaban.LogModel = Backbone.Model.extend({});

var jobLogView;
azkaban.JobLogView = Backbone.View.extend({
	events: {
		"click #updateLogBtn" : "handleUpdate"
	},
	initialize: function(settings) {
		this.model.set({"offset": 0});
		this.handleUpdate();
	},
	handleUpdate: function(evt) {
		var requestURL = contextURL + "/executor"; 
		var model = this.model;
		var finished = false;

		var date = new Date();
		var startTime = date.getTime();
		
		while(!finished) {
			var offset = this.model.get("offset");
			$.ajax({
				url: requestURL,
				type: "get",
				async: false,
				dataType: "json",
				data: {"execid": execId, "jobId": jobId, "ajax":"fetchExecJobLogs", "offset": offset, "length": 50000, "attempt": attempt},
				error: function(data) {
					console.log(data);
					finished = true;
				},
				success: function(data) {
					console.log("fetchLogs");
					if (data.error) {
						console.log(data.error);
						finished = true;
					}
					else if (data.length == 0) {
						finished = true;
					}
					else {
						var date = new Date();
						var endTime = date.getTime();
						if ((endTime - startTime) > 10000) {
							finished = true;
							showDialog("Alert","The log is taking a long time to finish loading. Azkaban has stopped loading them. Please click Refresh to restart the load.");
						} 
	
						var re = /(https?:\/\/(([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?))/g;
						var log = $("#logSection").text();
						if (!log) {
							log = data.data;
						}
						else {
							log += data.data;
						}
	
						var newOffset = data.offset + data.length;
	
						$("#logSection").text(log);
						log = $("#logSection").html();
						log = log.replace(re, "<a href=\"$1\" title=\"\">$1</a>");
						$("#logSection").html(log);
	
						model.set({"offset": newOffset, "log": log});
						$(".logViewer").scrollTop(9999);
					}
				}
			});
		}
	}
});

var showDialog = function(title, message) {
  $('#messageTitle').text(title);

  $('#messageBox').text(message);

  $('#messageDialog').modal({
      closeHTML: "<a href='#' title='Close' class='modal-close'>x</a>",
      position: ["20%",],
      containerId: 'confirm-container',
      containerCss: {
        'height': '220px',
        'width': '565px'
      },
      onShow: function (dialog) {
      }
    });
}

$(function() {
	var selected;

	logModel = new azkaban.LogModel();
	jobLogView = new azkaban.JobLogView({el:$('#jobLogView'), model: logModel});
});
