var active_timer = 100;

function init_edit(partID) {
	$('table#details tr#location td p').hide();
	$('#location-dropdown').show();
	$('#container-dropdown').show();

	$('table#details tr#partno td p').hide();
	$('input[name=partno-input]').show();
	$('#magical_autofill').show();

	$('table#details tr#description td p').hide();
	$('input[name=description-input]').show();

	$('table#details tr#datasheet td input').closest().show();
	$('table#details tr#datasheet td input').show();

	$('#duplicate-button').closest('div').hide();
	$('#delete-button').closest('div').hide();

	$('tr#datasheet').show();

	$('input[name=notes-input]').show();
	$('table#details tr#notes td p').hide();

	// make map have names of containers for this one click
	if (!$('img#map').attr('src').endsWith('/a')){
		$('img#map').attr('src', $('img#map').attr('src') + '/a')
	}
	
	// var newButton = '<div class="round-button-left"><a href="#" onclick="save(' + partID + ')"><i class="fa fa-check" aria-hidden="true"></i></a></div>';
	// $('.round-button-left').replaceWith(newButton);
	$('#edit-button').html('<i class="fa fa-check" aria-hidden="true"></i>');
	$('#edit-button').off('click').on('click', function(){
		save(partID);
	});
}

function new_entry() {
	$('table#details tr#location td p').text('');
	$('table#details tr#partno td p').text('');
	$('table#details tr#description td p').text('');
	$('table#details tr#partno td input').val('');
	$('table#details tr#description td input').val('');
	$('input[name=datasheet-url-input]').val('');
	init_edit(-1);
	overlay_in();
	container_onchange();
	
	// make map have names of containers for this one click
	if (!$('img#map').attr('src').endsWith('/a')){
		$('img#map').attr('src', $('img#map').attr('src') + '/a')
	}
}

function end_edit() {

	$('table#details tr#location td p').text($('table#details tr#location td select option:checked').text());
	$('table#details tr#location td p').show();
	$('#location-dropdown').hide();
	$('#container-dropdown').hide();

	$('table#details tr#partno td p').text($('table#details tr#partno td input').val());
	$('table#details tr#partno td p').show();
	$('table#details tr#partno td input').hide();

	$('#magical_autofill').hide();

	$('table#details tr#description td p').text($('table#details tr#description td input').val());
	$('table#details tr#description td p').show();
	$('table#details tr#description td input').hide();

	$('tr#datasheet').hide();

	$('input[name=notes-input]').hide();
	$('table#details tr#notes td p').show();

	$('#duplicate-button').closest('div').show();
	$('#delete-button').closest('div').show();

	$('#edit-button').html('<i class="fa fa-pencil" aria-hidden="true"></i>');
	// var newButton = '<div class="round-button-left"><a href="#" id="edit-button"><i class="fa fa-pencil" aria-hidden="true"></i></a></div>';
	// $('.round-button-left').replaceWith(newButton);
}

function save(partID) {
	if (!$('#location-dropdown').val() || $('#location-dropdown').val()== -1 ) {
		alert('Please select a location.');
		return;
	}
	var location_id_v = $('#location-dropdown').val();
	var partno_v = $('input[name=partno-input]').val();
	var description_v = $('input[name=description-input]').val();
	var datasheet = $('table#details tr#datasheet td input')[0].files;
	var datasheet_url_v = $('input[name=datasheet-url-input]').val();
	var notes_v = $('input[name=notes-input]').val();
	if(partno_v.length == 0){
		alert('Please enter a part number.');
		return;
	}
	if(description_v.length > 200) {
		alert('Description too long (max 200 characters).');
		return;
	}
	if(description_v.length == 0) {
		alert('Please enter a description.');
		return;
	}
	var data = new FormData();

	if (datasheet.length == 1) {
		if(! datasheet[0]['name'].match(/^[\w\-]+\.pdf$/g)) {
			alert('Invalid filename. Please match /^[\w\-]+\.pdf$/g');
			return;
		}
		if (datasheet[0]['size'] > 20 * 1000000) {
			alert('File too large. Must be < 20MB.');
			return;
		}
		data.append('datasheet-file', datasheet[0]);
	} else if (datasheet_url_v.length > 0) {
		data.append('datasheet-url', datasheet_url_v);
	}
	data.append('partno', partno_v);
	data.append('location_id', location_id_v);
	data.append('description', description_v);
	data.append('notes', notes_v);

	$.ajax({
	        // Your server script to process the upload
	    url: rootURL + 'alter/' + partID,
	    type: 'POST',

      data: data,

      // Tell jQuery not to process data or worry about content-type
      // You *must* include these options!
      cache: false,
      contentType: false,
      processData: false,
			success: function(data) {
				var datasheet_par = '<p id="datasheet-info"><i class="fa fa-check"></i></p>';
				$('#datasheet-info').replaceWith(datasheet_par); // Fix addressing
				$('#edit-button').click(function() {
					init_edit(JSON.parse(data).part_id);
				});
			},
			error: function() {
				alert("Couldn't update the part information. Please retry.");
			}

	  });

	end_edit();
	perform_query();
}

function text_filter(string) {
	if (string != null)
		return string;
	else
		return '';
}

function delete_entry(partID) {
	if (partID < 0)
		return;
	if (!confirm('Delete the selected entry?'))
		return;
	$.ajax({
		url: rootURL + 'delete/' + partID,
		type: 'GET',
		cache: false,
		contentType: false,
		processData: false,
		success: function() {
			overlay_out();
			perform_query();
		},
		fail: function() {
			console.log('An error occurred while deleting the entry');
		},
	});
}

function show_part_info(partID) {
	$.getJSON(rootURL + 'getpartinfo/' + partID, function(data) {
		$('table#details tr#location td p').text(text_filter(data.location_descriptor)); // name is the location friendly name
		$('#container-dropdown').val(data.container_id);
		$('img#map').attr('src', 'parts/map/' + data.container_id);
		$('#location-dropdown').empty();
		$.getJSON('parts/getlocationsInContainer/' + data.container_id,  function(json) {
			$.each(json, function(loc_id, loc_name) {
				$('#location-dropdown').append('<option value="' + loc_id + '">' + loc_name + '</option>');
			});
			$('#location-dropdown').val(data.location_id);
		});
		$('table#details tr#partno td p').text(text_filter(data.partno));
		$('table#details tr#partno td input').val(text_filter(data.partno));
		$('table#details tr#description td p').text(text_filter(data.description));
		$('table#details tr#description td input').val(text_filter(data.description));
		$('table#details tr#notes td p').text(text_filter(data.notes));
		$('input[name=notes-input]').val(text_filter(data.notes));
		// Resetting file input. Super dirty hack. Disgusting
		var $el = $('#datasheet-finput');
		$el.wrap('<form>').closest('form').get(0).reset();
		$el.unwrap();
		if (data.datasheet != null) {
			$('tr#datasheet-head').html($('<td>DATASHEET: <a href="' + data.datasheet + '" target="_blank"><i class="fa fa-file-text" aria-hidden="true"></i></a></td>'));
			$('input[name=datasheet-url-input]').val(data.datasheet);
		}
		else {
			$('tr#datasheet-head td').text('DATASHEET: ');
			$('input[name=datasheet-url-input]').val('');
		}
		$('#edit-button').off('click').on('click', function() {
			init_edit(partID);
		});
		$('#delete-button').off('click').on('click', function() {
			delete_entry(partID);
		});
		overlay_in();
	}).fail(function() {
		console.log( "Fetching part info failed" );
	});

	// update URL and history
	update_url(partID);
}

function update_url(partID){
	params = {}
	// If there is a seach bar, take its content
	if($('.search-bar').length){
		params['q'] = $('.search-bar').val();
	}
	if(partID != 0){
		params['p'] = partID
	}
	window.history.pushState('searching', '', 'parts?' + jQuery.param(params));
}

function perform_query() {
	$('#no-results').stop();
	$('#no-results').css("opacity", 0);
	$('#no-results').hide();
	var query = $('.search-bar').val();
	var data = {
		l:$('#location').is(':checked'),
		p:$('#partno').is(':checked'),
		d:$('#description').is(':checked')
	};
	filter = '0';
	$("#results").find("tr:not(:first)").remove(); // Delete all table rows
	$.getJSON(rootURL + 'query/' + filter  + '/' + query, data, function(data) {
		for(var i = 0; i < data.length; i++) {
			var newRow = $('<tr onclick="show_part_info(' + data[i].id + ')"></tr>');

			newRow.append($('<td id="location"></td>').text(text_filter(data[i].location_descriptor)));
			newRow.append($('<td id="partno"></td>').text(text_filter(data[i].partno)));
			newRow.append($('<td id="description"></td>').text(text_filter(data[i].description)));
			$('#results').append(newRow);
		}
		if(data.length == 0) {
			$('#no-results').show();
			$('#no-results').animate({opacity:1},2000);
		}
	}).fail(function() {
		$('#no-results').show();
		$('#no-results').animate({opacity:1},2000);
		console.log( "Query failed" );
	});

	update_url(0);
}

function container_onchange() {
	var selected_container_id = $('#container-dropdown').val();
	if (selected_container_id > 0) {
		$('img#map').attr('src', 'parts/map/' + selected_container_id);
		$('#location-dropdown').empty();
		$.getJSON('parts/getlocationsInContainer/' + selected_container_id,  function(data) {
			$.each(data, function(location_id, location_name) {
				$('#location-dropdown').append('<option value="' + location_id + '">' + location_name + '</option>');
			});
		});
	}
}

// function octopartFetch(){
// 	$('#magic-autofill-button').attr('disabled', 'disabled');
// 	$.getJSON(rootURL + 'fetchOctopartSnippet/' + $('#partno-input').val()).done(function(json){
// 		$('#magic-autofill-button').removeAttr('disabled');
// 		if (json['result']=='ok'){
// 			$('#description-input').val(json['snippet']);
// 		}else{
// 			$('#description-input').val('');
// 			$('#description-input').attr('placeholder', json['result']);
// 		}
//   	}).fail(function() {
//     	$('#magic-autofill-button').removeAttr('disabled');
//     });
// }

$(document).ready(function() {
    $.ajaxSetup({ cache: false });
    $('.search-bar').on('keyup', function() {
    		clearTimeout(active_timer);
    		active_timer = setTimeout(perform_query, 100);
    });
    $('.checkbox').change( function() {
        if (   !$('#location').is(':checked')
            && !$('#partno').is(':checked')
            && !$('#description').is(':checked')
            && !$('#has-docs').is(':checked'))
		$(this).prop('checked', true);
	else
		perform_query();
    });
    
    //For linking to a search query or specific part
    const search_params = new URLSearchParams(window.location.search);
	if(search_params.has('q')){
		$('.search-bar').val(search_params.get('q')); perform_query(); 
	}
	if(search_params.has('p')){
		show_part_info(search_params.get('p'));
	}

 //    $('#partno-input').bind('blur',function() {
 //  		if($('#partno-input').val().length > 0){
 //  			octopartFetch();
 //  		}
	// });
});