/*
 * 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 dbUploadPanel;
azkaban.DBUploadPanel= Backbone.View.extend({
	  events : {
	  	"click #upload-jar-btn" : "handleUpload"
	  },
	  initialize : function(settings) {
	  },
	  render: function() {
	  },
	  handleUpload: function(){
		var filename = $("#file").val();
		if (filename.length > 4) {
			var lastIndexOf = filename.lastIndexOf('.');
			var lastIndexOfForwardSlash = filename.lastIndexOf('\\');
			var lastIndexOfBackwardSlash = filename.lastIndexOf('/');
			
			var startIndex = Math.max(lastIndexOfForwardSlash, lastIndexOfBackwardSlash);
			startIndex += 1;
			
			var subfilename = filename.substring(startIndex, filename.length);
			var end = filename.substring(lastIndexOf, filename.length);
			if (end != ".jar") {
				alert("File "+ subfilename + " doesn't appear to be a jar. Looking for mysql-connector*.jar");
				return;
			}
			else if (subfilename.substr(0, "mysql-connector".length) != "mysql-connector") {
				alert("File "+ subfilename + " doesn't appear to be a mysql connector jar. Looking for mysql-connector*.jar");
				return;
			}
			
			console.log("Looks valid, uploading.");
			var uploadForm = document.getElementById("upload-form");
			var formData = new FormData(uploadForm);
			var contextUrl = contextURL;
			
			var xhr = new XMLHttpRequest();
			xhr.onreadystatechange=function() {
				  if (xhr.readyState==4) {
					  var data = JSON.parse(xhr.responseText);
					  if (data.error) {
						  alert(data.error);
					  }
					  else {
						  $("#installed").html("Uploaded <span class=bold>" + data.jarname + "</span>");
					  }
				  }
				 }
			xhr.open("POST", "uploadServlet");
		    xhr.send(formData);

			console.log("Finished.");
			
		}
		else {
			alert("File doesn't appear to be valid.");
		}
	  }
});

var dbConnectionsPanel;
azkaban.DBConnectionPanel= Backbone.View.extend({
	  events : {
	  	"click #save-connection-button" : "handleSaveConnection"
	  },
	  initialize : function(settings) {
		  if (verified) {
			$("#save-results").text(message);
			$("#save-results").css("color", "#00CC00");
		  } else {
			$("#save-results").hide();
		  }
	  },
	  render: function() {
	  },
	  handleSaveConnection: function(){
		var host = $("#host").val();
		var port = $("#port").val();
		var database = $("#database").val();
		var username = $("#username").val();
		var password = $("#password").val();
		
		var contextUrl = contextURL;
		$.post(
			contextUrl, 
			{ajax:"saveDbConnection", host: host, port:port, database: database, username: username, password: password},
			function(data) {
				if (data.error) {
					verified = false;
					$("#save-results").text(data.error);
					$("#save-results").css("color", "#FF0000");
				}
				else if (data.success) {
					verified = true;
					$("#save-results").text(data.success);
					$("#save-results").css("color", "#00CC00");
				}
				$("#save-results").show();
			}
		);
	  }
});

$(function() {
	dbUploadPanel = new azkaban.DBUploadPanel({el:$( '#dbuploadpanel')});
	dbConnectionPanel = new azkaban.DBConnectionPanel({el:$( '#dbsettingspanel')});
	
	$("#saveAndContinue").click(function(data) {
		if (!verified) {
			alert("The database connection hasn't been verified.");
		}
		else {
			window.location="/?usersetup";
		}
	});
});
