// Licensed Materials  - Property of IBM
// IBM Cognos Products: rs
// (C) Copyright IBM Corp. 2015, 2021
// US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

define(['bi/glass/app/plugins/MenuActionInterface'], function(MenuActionInterface) {
	'use strict';

	var AuthoringMenu = MenuActionInterface.extend({

	
	onSelectItem: function(context) {
		var v_sMenuItem = context.target.itemId;
		var v_sObserverId = "rsAppSaveAsMenuActions";

		var v_Application = context.glassContext.currentAppView.currentContentView.getAuthoringApplication();
		if (!v_Application)
		{
			return;
		}

		switch( v_sMenuItem )
		{
			case "com.ibm.bi.authoring.save_as":
				v_Application.SaveAsReport();
				break;
				
			case "com.ibm.bi.authoring.convert_to_active_report":
				v_Application.ConvertToActiveReport();
				break;
				
			case "com.ibm.bi.authoring.convert_to_template":
				v_Application.ConvertToTemplate();
				break;
				
			case "com.ibm.bi.authoring.save_as_report_view":
				v_Application.SaveAsReportView();
				break;						
			
			case "com.ibm.bi.authoring.save":
			case "com.ibm.bi.datasets.dataset_save":
				var v_oCmProperties = context.glassContext.currentAppView.currentContentView.cmProperties;
				if (v_sMenuItem == "com.ibm.bi.authoring.save" && v_Application.SharedState.Get("isViewer") &&
					v_oCmProperties && v_oCmProperties.permissions.indexOf("read") == -1) {
					// Doing save from viewer without read access - not supported since need to unstub spec
					// which is not possible if can't read spec.
					context.glassContext.showToast(v_Application.GetString("IDS_MSG_NO_PERMISSIONS_TO_SAVE"), {'type':'error'});
					break;
				}
				else if (!v_oCmProperties || v_oCmProperties.permissions.indexOf("write") != -1)
				{
					// no cm permissions implies this is a new report/dataset so we need to allow save.
					v_Application.Save();
				}
				else
				{
					// No write permission
					if (v_sMenuItem == "com.ibm.bi.authoring.save" && v_Application.SharedState.Get("isViewer") &&
						context.glassContext.hasCapability("canUseReportStudio") && context.glassContext.hasCapability("canUseReportStudioFileManagement")) {
						// Doing a save from viewer - switch to save as but only if the required capabiltities are available
						v_Application.SaveAsReport();
					}
					else {
						context.glassContext.showToast(v_Application.GetString("IDS_MSG_NO_PERMISSIONS_TO_SAVE"), {'type':'error'});
					}
				}
				break;
			
			case "com.ibm.bi.datasets.refresh":
				v_Application.SaveDataSet(function(v_sFileName, v_sStoreID) {
					// options.id {string} - store ID of the dataset to run
					// options.name {string} - the name of the data set to execute. Will be shown in the toast
					// options.showToastWhenDone {boolean} - default is true, set to false if you don't want a toast to be displayed when the dataset is done running
					// options.glassContext {object} - the glassContext object
					var options =
					{
							id					: v_sStoreID,
							name				: v_sFileName,
							showToastWhenDone	: true,
							glassContext		: context.glassContext
					};
					
					
					context.glassContext.getSvc('.DatasetExecutionService')
					.then(function(DatasetExecutionService){
					DatasetExecutionService.execute(options);
					});					
				});
				break;

			default:
				console.warn("Unhandled item: " + v_sMenuItem);
				return;
		}
		
		v_Application.GlassMenu_onSelectItem(v_sMenuItem);
	},
	
	isItemVisible: function(context){
		var v_sMenuItem = context.target.itemId;
		var v_Application = context.glassContext.currentAppView.currentContentView.getAuthoringApplication();
		if (!v_Application)
		{
			return;
		}

		var v_oCmProperties = context.glassContext.currentAppView.currentContentView.cmProperties;
		var v_bRead = !v_oCmProperties || v_oCmProperties.permissions.indexOf("read") != -1;

		var v_bResult;
		switch (v_sMenuItem)
		{
		case "com.ibm.bi.authoring.save_as_report_view":
			v_bResult = v_Application.SharedState.Get("isViewer") && v_Application.SharedState.Get("cmSearchPath") && !v_Application.SharedState.Get("isModified");
			break;
			case "com.ibm.bi.datasets.dataset_save":
			v_bResult = v_Application.SharedState.Get("isModified");  
			break;
		case "com.ibm.bi.authoring.save":
		v_bResult = false;  // always hide save from popup since it is the default action on button
			break;
		case "com.ibm.bi.authoring.save_as":
			if (!(context.glassContext.hasCapability("canUseReportStudio") && context.glassContext.hasCapability("canUseReportStudioFileManagement"))) {
				// save as calls the report service add method which requires both the above capabilities. 
				v_bResult = false;
			}
			else if (v_Application.SharedState.Get("isViewer")) {
				// Saving from viewer requires full spec which is only possible if you have read access
				v_bResult = v_bRead;
			}
			else {
				v_bResult = true;
			}
			break;
		case "com.ibm.bi.datasets.refresh":
			v_bResult = v_Application.SharedState.Get("isModified");  
			break;
		case "com.ibm.bi.authoring.convert_to_active_report":
			v_bResult = !v_Application.SharedState.Get("isViewer") && !v_Application.SharedState.Get("isActiveReport");
			break;
		case "com.ibm.bi.authoring.convert_to_template":
			v_bResult = !v_Application.SharedState.Get("isViewer");
			break;				
		default:
			v_bResult = true;
			break;
		}
		
		return v_bResult;
	}
	
	});
	return AuthoringMenu;
});