/**
 * Copyright (c) 2020-2025, JGraph Holdings Ltd
 * Copyright (c) 2020-2025, draw.io AG
 */
// Handles form-submit by preparing to process response
function handleSubmit()
{
	if (window.parent.openNew && window.parent.baseUrl != null)
	{
		window.parent.openFile.setConsumer(null);
		window.parent.open(window.parent.baseUrl);
	}
	
	// NOTE: File is loaded via JS injection into the iframe, which in turn sets the
	// file contents in the parent window. The new window asks its opener if any file
	// contents are available or waits for the contents to become available.
	return true;
};

// Hides this dialog
function hideWindow(cancel)
{
	if (window.parent.openFile != null)
	{
		window.parent.openFile.cancel(cancel);
	}
};

function fileChanged()
{
	var form = window.openForm || document.getElementById('openForm');
	var openButton = document.getElementById('openButton');
	
	if (form.upfile.value.length > 0)
	{
		openButton.removeAttribute('disabled');
	}
	else
	{
		openButton.setAttribute('disabled', 'disabled');
	}		
};

function main()
{
	if (window.parent != null && window.parent.Editor != null)
	{
		document.body.innerText = '';
		var div = document.createElement('div');
		div.style.fontFamily = 'Arial';
		var darkMode = (typeof window.parent.Editor.isDarkMode === 'function' &&
			window.parent.Editor.isDarkMode());

		window.parent.listBrowserFiles(function(filesInfo)
		{
			if (window.parent != null)
			{
				if (filesInfo.length == 0)
				{
					window.parent.mxUtils.write(div, window.parent.mxResources.get('noFiles'));
					div.style.color = (darkMode) ? '#cccccc' : '';
					window.parent.mxUtils.br(div);
				}
				else
				{
					// Sorts the array by filename (titles)
					filesInfo.sort(function (a, b)
					{
						return a.title.toLowerCase().localeCompare(b.title.toLowerCase());
					});
					
					var table = document.createElement('table');
					var hrow = document.createElement('tr');
					hrow.style.backgroundColor = (darkMode) ? '#000' : '#D6D6D6';
					hrow.style.color = (darkMode) ? '#cccccc' : '';
					hrow.style.height = '25px';
					hrow.style.textAlign = 'left';
					table.appendChild(hrow);
					var hName = document.createElement('th');
					window.parent.mxUtils.write(hName, window.parent.mxResources.get('name'));
					hrow.appendChild(hName);
					var hModified = document.createElement('th');
					hModified.style.width = '180px';
					window.parent.mxUtils.write(hModified, window.parent.mxResources.get('lastModified'));
					hrow.appendChild(hModified);
					var hSize = document.createElement('th');
					window.parent.mxUtils.write(hSize, window.parent.mxResources.get('size'));
					hSize.style.width = '70px';
					hrow.appendChild(hSize);
					var hCtrl = document.createElement('th');
					hCtrl.style.width = '23px';
					hrow.appendChild(hCtrl);
					table.style.fontSize = '12pt';
					table.style.width = '100%';

					for (var i = 0; i < filesInfo.length; i++)
					{
						var fileInfo = filesInfo[i];
						
						if (fileInfo.title.length > 0)
						{
							var row = document.createElement('tr');
							row.style.color = (darkMode) ? '#cccccc' : '';
							table.appendChild(row);
							
							if (i & 1 == 1)
							{
								row.style.backgroundColor = (darkMode) ? '#000' : '#E6E6E6';
							}
								
							var nameTd = document.createElement('td');
							row.appendChild(nameTd);
							var link = document.createElement('a');
							link.style.fontDecoration = 'none';
							window.parent.mxUtils.write(link, fileInfo.title);
							link.style.cursor = 'pointer';
							nameTd.appendChild(link);
							
							var modifiedTd = document.createElement('td');
							row.appendChild(modifiedTd);
							var str = window.parent.EditorUi.prototype.timeSince(new Date(fileInfo.lastModified));
							
							if (str == null)
							{
								str = window.parent.mxResources.get('lessThanAMinute');
							}
							
							window.parent.mxUtils.write(modifiedTd, window.parent.mxResources.get('timeAgo', [str]));
							
							var sizeTd = document.createElement('td');
							row.appendChild(sizeTd);
							window.parent.mxUtils.write(sizeTd, window.parent.EditorUi.prototype.formatFileSize(fileInfo.size));
							
							var ctrlTd = document.createElement('td');
							row.appendChild(ctrlTd);
							ctrlTd.style.textAlign = 'center';
							var img = document.createElement('img');
							img.src = window.parent.Editor.trashImage;
							img.style.cursor = 'pointer';
							img.style.display = 'inline-block';
							img.style.width = '18px';
							img.setAttribute('title', window.parent.mxResources.get('delete'));
							ctrlTd.appendChild(img);
							
							if (darkMode)
							{
								img.style.filter = 'invert(100%)';
							}

							window.parent.mxEvent.addListener(img, 'click', (function(k)
							{
								return function()
								{
									if (window.parent.mxUtils.confirm(window.parent.mxResources.get('delete') + ' "' + k + '"?'))
									{
										window.parent.deleteBrowserFile(k, function()
										{
											window.location.reload();											
										});
									}
								};
							})(fileInfo.title));
		
							window.parent.mxEvent.addListener(link, 'click', (function(k)
							{
								return function()
								{
									if (window.parent.openNew && window.parent.baseUrl != null)
									{
										var of = window.parent.openFile;
										window.parent.openBrowserFile(k, function(data)
										{
											if (window.parent != null)
											{
												window.parent.geOpenWindow(window.parent.baseUrl + '#L' + encodeURIComponent(k), function()
												{
													of.cancel(false);
												}, function()
												{
													of.setData(data, k);
												});
											}							
										}, function()
										{
											//TODO add error
										});
									}
									else
									{
										window.parent.openBrowserFile(k, function(data)
										{
											if (window.parent != null)
											{
												window.parent.openFile.setData(data, k);
											}
										}, function()
										{
											//TODO add error
										});
									}
								};
							})(fileInfo.title));
						}
					}
					
					div.appendChild(table);
				}
				
				var closeButton = window.parent.mxUtils.button(window.parent.mxResources.get('close'), function()
				{
					hideWindow(true);
				});
				
				closeButton.className = 'geBtn';
				closeButton.style.position = 'fixed';
				closeButton.style.bottom = '0px';
				closeButton.style.right = '0px';
				div.appendChild(closeButton);
				
				document.body.appendChild(div);
			}
		});
	}
	else
	{
		document.body.innerHTML = 'Missing parent window';
	}
};

window.addEventListener('load', main);
