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

module.exports = function (oAppData) {
	var
		TextUtils = require('%PathToCoreWebclientModule%/js/utils/Text.js'),
		
		App = require('%PathToCoreWebclientModule%/js/App.js'),
		ModulesManager = require('%PathToCoreWebclientModule%/js/ModulesManager.js'),
		
		Settings = require('modules/%ModuleName%/js/Settings.js')
	;

	let calendarViewInstance = null;

	const getCalendarViewInstance = () => {
		if(!calendarViewInstance) {
			calendarViewInstance = require('modules/%ModuleName%/js/views/CalendarView.js');
		}
		return calendarViewInstance;
	}
	
	Settings.init(oAppData);
	
	if (!ModulesManager.isModuleAvailable(Settings.ServerModuleName))
	{
		return null;
	}
	
	require('modules/%ModuleName%/js/enums.js');
	require('modules/%ModuleName%/js/vendors/fullcalendar/fullcalendar.css');
	require('modules/%ModuleName%/js/vendors/fullcalendar/fullcalendar.js');

	if (App.isPublic())
	{
		return {
			getScreens: function () {
				return { [Settings.HashModuleName]: getCalendarViewInstance };
			},
			getHeaderItem: function () {
				return {
					item: require('modules/%ModuleName%/js/views/PublicHeaderItem.js'),
					name: Settings.HashModuleName
				};
			}
		};
	}
	else if (App.isUserNormalOrTenant())
	{
		if (App.isNewTab())
		{
			return {
				start: function (ModulesManager) {
					if (Settings.AllowAppointments)
					{
						App.subscribeEvent('MailWebclient::RegisterMessagePaneController', function (fRegisterMessagePaneController) {
							fRegisterMessagePaneController(require('modules/%ModuleName%/js/views/IcalAttachmentView.js'), 'BeforeMessageBody');
						});
					}
				}
			};
		}
		else
		{
			require('modules/%ModuleName%/js/koBindings.js');
			require('modules/%ModuleName%/js/MainTabExtMethods.js');

			return {
				start: function (ModulesManager) {
					if (Settings.AllowAppointments)
					{
						App.subscribeEvent('MailWebclient::RegisterMessagePaneController', function (fRegisterMessagePaneController) {
							fRegisterMessagePaneController(require('modules/%ModuleName%/js/views/IcalAttachmentView.js'), 'BeforeMessageBody');
						});
					}
					ModulesManager.run('SettingsWebclient', 'registerSettingsTab', [function () { return require('modules/%ModuleName%/js/views/CalendarSettingsFormView.js'); }, Settings.HashModuleName, TextUtils.i18n('%MODULENAME%/LABEL_SETTINGS_TAB')]);

					App.broadcastEvent('RegisterNewItemElement', {
						'title': TextUtils.i18n('%MODULENAME%/ACTION_CREATE_EVENT'),
						'handler': () => {
							window.location.hash = Settings.HashModuleName;
							const calendarViewInstance = getCalendarViewInstance();
							calendarViewInstance.createEventInCurrentCalendar();

							if (calendarViewInstance.calendars.currentCal()) {
								calendarViewInstance.createEventInCurrentCalendar();
							} else {
								const currentCalSubscribtion = calendarViewInstance.calendars.currentCal.subscribe(function () {
									calendarViewInstance.createEventInCurrentCalendar();
									currentCalSubscribtion.dispose();
								});
							}
						},
						'className': 'item_calendar',
						'order': 4,
						'column': 1
					});
				},
				getScreens: function () {
					return { [Settings.HashModuleName]: getCalendarViewInstance };
				},
				getHeaderItem: function () {
					return {
						item: require('modules/%ModuleName%/js/views/HeaderItemView.js'),
						name: Settings.HashModuleName
					};
				},
				getWeekStartsOn: function () {
					return Settings.WeekStartsOn;
				},
				getMobileSyncSettingsView: function () {
					return require('modules/%ModuleName%/js/views/MobileSyncSettingsView.js');
				}
			};
		}
	}
	
	return null;
};