define([
	"jquery",
	"underscore",
	"classes/Extension",
	"text!html/dialogManageSynchronizationLocation.html",
], function($, _, Extension, dialogManageSynchronizationLocationHTML) {

	var dialogManageSynchronization = new Extension("dialogManageSynchronization", 'Dialog "Manage synchronization"', false, true);

	var eventMgr;
	dialogManageSynchronization.onEventMgrCreated = function(eventMgrParameter) {
		eventMgr = eventMgrParameter;
	};

	var synchronizer;
	dialogManageSynchronization.onSynchronizerCreated = function(synchronizerParameter) {
		synchronizer = synchronizerParameter;
	};

	var fileDesc;
	var syncListElt;
	var $showAlreadySynchronizedElt;
	var refreshDialog = function(fileDescParameter) {
		if(fileDescParameter !== undefined && fileDescParameter !== fileDesc) {
			return;
		}

		$showAlreadySynchronizedElt.toggleClass("hide", _.size(fileDesc.syncLocations) === 0);

		var syncListHtml = _.reduce(fileDesc.syncLocations, function(result, syncAttributes) {
			return result + _.template(dialogManageSynchronizationLocationHTML, {
				syncAttributes: syncAttributes,
				syncDesc: syncAttributes.id || syncAttributes.path,
				syncLocationLink: syncAttributes.provider.getSyncLocationLink && syncAttributes.provider.getSyncLocationLink(syncAttributes)
			});
		}, '');

		syncListElt.innerHTML = syncListHtml;
	};

	dialogManageSynchronization.onFileSelected = function(fileDescParameter) {
		fileDesc = fileDescParameter;
		refreshDialog(fileDescParameter);
	};

	dialogManageSynchronization.onSyncExportSuccess = refreshDialog;
	dialogManageSynchronization.onSyncRemoved = refreshDialog;

	dialogManageSynchronization.onReady = function() {
		var modalElt = document.querySelector(".modal-manage-sync");
		syncListElt = modalElt.querySelector(".sync-list");

		$showAlreadySynchronizedElt = $(document.querySelectorAll(".show-already-synchronized"));

		$(syncListElt).on('click', '.remove-button', function() {
			var $removeButtonElt = $(this);
			var syncAttributes = fileDesc.syncLocations[$removeButtonElt.data('syncIndex')];
			fileDesc.removeSyncLocation(syncAttributes);
			eventMgr.onSyncRemoved(fileDesc, syncAttributes);
		});
	};

	return dialogManageSynchronization;

});