/home/ivoiecob/email.hirewise-va.com/modules/FilesWebclient/js/manager.js
'use strict';

module.exports = function (oAppData) {
	
	require('modules/%ModuleName%/js/enums.js');

	const
		$ = require('jquery'),

		App = require('%PathToCoreWebclientModule%/js/App.js'),
		ModulesManager = require('%PathToCoreWebclientModule%/js/ModulesManager.js'),
		TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'),

		Settings = require('modules/%ModuleName%/js/Settings.js')
	;
	let 
		HeaderItemView = null,
		aToolbarButtons = [],
		filesViewInstance = null
	;
	
	const getFilesViewInstance = () => {
		if(!filesViewInstance) {
			const CFilesView = require('modules/%ModuleName%/js/views/CFilesView.js');
			filesViewInstance = new CFilesView();
			
			if (!App.isPublic()) {
				filesViewInstance.registerToolbarButtons(aToolbarButtons);
				aToolbarButtons = [];
			}
		}
		return filesViewInstance;
	};
	
	Settings.init(oAppData);

	if (!ModulesManager.isModuleAvailable(Settings.ServerModuleName) || !App.isPublic() && Settings.Storages.length === 0)
	{
		return null;
	}
	
	if (App.isPublic())
	{
		return {
			getScreens: function () {
				var oScreens = {};
				oScreens[Settings.HashModuleName] = getFilesViewInstance;
				return oScreens;
			}
		};
	}
	else if (App.isUserNormalOrTenant())
	{
		if (App.isNewTab())
		{
			return {
				getSelectFilesPopup: function () {
					return require('modules/%ModuleName%/js/popups/SelectFilesPopup.js');
				}
			};
		}
		else
		{
			return {
				start: function (ModulesManager) {
					if (Settings.ShowCommonSettings || Settings.ShowFilesApps)
					{
						ModulesManager.run('SettingsWebclient', 'registerSettingsTab', [
							function () { return require('modules/%ModuleName%/js/views/FilesSettingsFormView.js'); },
							Settings.HashModuleName,
							TextUtils.i18n('%MODULENAME%/LABEL_SETTINGS_TAB')
						]);
					}

					App.broadcastEvent('RegisterNewItemElement', {
						'title': TextUtils.i18n('%MODULENAME%/ACTION_UPLOAD_FILES'),
						'handler': () => {
							// check if we are on contacts screen or not
							if (!window.location.hash.startsWith('#' + Settings.HashModuleName)) {
								window.location.hash = Settings.HashModuleName
							}

							const filesViewInstance = getFilesViewInstance();
							function clickUploaderButton() {
								const input = filesViewInstance.uploaderButton().find('input')[0];
								if (input) {
									input.click();
									// in case of Upload Button it's needed to emulate click on the button to close the menu
									setTimeout(function () {
										$('.tabsbar .new_button_panel')[0].click()
									}, 0);
								}
							}

							if (filesViewInstance.isCreateAllowed()) {
								if(filesViewInstance.uploaderButton() && filesViewInstance.uploaderButton().find('input').length){
									clickUploaderButton();
								} else {
									const uploaderButtonSubscription = filesViewInstance.uploaderButton.subscribe(() => {
										// Using setTimeout to ensure the DOM is updated before triggering the click
										setTimeout(() => {
											clickUploaderButton();
											uploaderButtonSubscription.dispose();
										}, 0)
									})
								}
							}
						},
						'className': 'item_files',
						'order': 1,
						'column': 2
					});

					App.broadcastEvent('RegisterNewItemElement', {
						'title': TextUtils.i18n('%MODULENAME%/ACTION_NEW_FOLDER'),
						'handler': () => {
							// check if we are on contacts screen or not
							if (!window.location.hash.startsWith('#' + Settings.HashModuleName)) {
								window.location.hash = Settings.HashModuleName
							}

							const filesViewInstance = getFilesViewInstance();
							const command = filesViewInstance.createFolderCommand
							if (command.canExecute()) {
								command()
							}
						},
						'className': 'item_folder',
						'order': 5,
						'column': 2
					});
				},
				getScreens: function () {
					var oScreens = {};
					oScreens[Settings.HashModuleName] = getFilesViewInstance;
					return oScreens;
				},
				getHeaderItem: function () {
					if (HeaderItemView === null)
					{
						var
							CHeaderItemView = require('%PathToCoreWebclientModule%/js/views/CHeaderItemView.js'),
							sTabTitle = Settings.CustomTabTitle !== '' ? Settings.CustomTabTitle : TextUtils.i18n('%MODULENAME%/ACTION_SHOW_FILES')
						;

						HeaderItemView = new CHeaderItemView(sTabTitle);
					}

					return {
						item: HeaderItemView,
						name: Settings.HashModuleName
					};
				},
				getSelectFilesPopup: function () {
					return require('modules/%ModuleName%/js/popups/SelectFilesPopup.js');
				},
				getMobileSyncSettingsView: function () {
					return require('modules/%ModuleName%/js/views/MobileSyncSettingsView.js');
				},
				getFileConstructor: function (oFile) {
					return require('modules/%ModuleName%/js/models/CFileModel.js');
				},
				addFileToCurrentFolder: function (oFile) {
					if (filesViewInstance) {
						filesViewInstance.addFileToCurrentFolder(oFile);
					}
				},
				refresh: function () {
					if (filesViewInstance) {
						filesViewInstance.refresh();
					}
				},
				registerToolbarButtons: function (oToolbarButtons) {
					if (filesViewInstance) {
						filesViewInstance.registerToolbarButtons([oToolbarButtons]);
					} else {
						aToolbarButtons.push(oToolbarButtons);
					}
				}
			};
		}
	}
	
	return null;
};