//doesn't work because dll will be in use
		/*public void deleteCachedFile()
		{
			var loadedWsdl = WsdlLocation.get_Text();
			if (loadedWsdl.valid())
			{
				var cachedFile = getCacheFileName(loadedWsdl);
				if(cachedFile.fileExists())
				{
					"Deleting File: {0}".info(cachedFile);
					Files.deleteFile(cachedFile);
				}
			}
		}*/
		
		public void addScriptingSupport()
		{
			Func<string> getDefaultScript = 
			()=>{
					var cSharpFile = new DotNet_SDK_WSDL().wsdl_CreateCSharp(this.WsdlLocation.get_Text()); 					
					
					var parametersCreation = "".line();
					var invocationParameters = "";
					
					foreach(var parameter in this.CurrentMethod.parameters())
					{
						var parameterName = parameter.Name.lowerCaseFirstLetter();
						var parameterDefaultValue = "";
						switch (parameter.ParameterType.FullName)
						{
							case "System.String":
								parameterDefaultValue = "\"\"";
								break;
							case "System.Int32":
								parameterDefaultValue = "0";
								break;	
							default:
								parameterDefaultValue = "new {0}()".format(parameter.ParameterType.FullName);
								break;
						}
						parametersCreation += "var {0} = {1};".line().format(parameterName, parameterDefaultValue);
						invocationParameters += "{0} ,".format(parameterName);
					}
										
					parametersCreation = (parametersCreation.valid()) ? parametersCreation.lineBeforeAndAfter() : "";
					invocationParameters = invocationParameters.removeLastChar();
					
					var varName = this.CurrentMethod.DeclaringType.Name.lowerCaseFirstLetter();					
					var scriptText = "var {0} = new {1}();".line().format(varName, this.CurrentMethod.DeclaringType.FullName) + 
									 parametersCreation + 									 
									 "var response = {0}.{1}({2});".line().format(varName, this.CurrentMethod.Name,  invocationParameters) + 
									 "return response; // response type is: {0}".line().format(this.CurrentMethod.ReturnType.FullName) + 
									 "".line() + 
									 "//O2File:{0}".line().format(cSharpFile) +
									 "//O2Ref:System.Web.Services.dll";										
					return scriptText;
				}; 
		
		Action openScriptEditorForCurrentMethod = 
			()=>{
					//O2.Kernel.O2LiveObjects.set("SoapParametersObject", wsdlCreation.SoapParametersObject);
					//O2.Kernel.O2LiveObjects.set("CurrentMethod", wsdlCreation.CurrentMethod);
		
		 
					var script = "WebService Script Execution".showAsForm(700,400).add_Script(false);   
					
					//script.InvocationParameters.Add("assembly", this.WsdlAssembly); 
					//script.InvocationParameters.Add("currentType", this.CurrentMethod.DeclaringType.Name); 
					//script.InvocationParameters.Add("currentMethod", this.CurrentMethod.Name); 
					script.Code = "....Creating WebService Method invocation script ...";
					script.Code = getDefaultScript();
				};
					
		//return wsdlCreation.CurrentMethod.typeName();   
		
		 
		 this.Methods_TreeView.insert_Above(20)
							  .add_Link("Open Script Editor for selected Method",0,0, ()=>openScriptEditorForCurrentMethod());
		 							  
		}
		public void load_Wsdl_From_WSDL_File(string wsdlToLoad)
		{
			markGuiAs_Busy();			
			O2Thread.mtaThread(
				()=> {						
						var cacheLocation = getCacheFileName(wsdlToLoad);
						
						var sdl_Wsdl = new DotNet_SDK_WSDL(); 			
						if (wsdlToLoad.fileExists().isFalse() && wsdlToLoad.isUri() && wsdlToLoad.ends("wsdl").isFalse())
							wsdlToLoad += "?wsdl";						
						var extraWsdlParameres = ExtraWsdlParameres.get_Text();	
						"extraWsdlParameres: {0}".debug(extraWsdlParameres ?? "");
						var cSharpFile = sdl_Wsdl.wsdl_CreateAssembly(wsdlToLoad,null,extraWsdlParameres); 
						//var cSharpFile = sdl_Wsdl.wsdl_CreateCSharp(wsdlToLoad); 
						var compiledAssemblyPath = load_Wsdl_From_CSharpFile(cSharpFile);	
						if (Cache_WSDL_Dll)
						{
							//create a cache copy of the dll	
							"Saving {0} dll cache to {1}".info(compiledAssemblyPath,cacheLocation);
							Files.copy(compiledAssemblyPath, cacheLocation);
						}
					  });
		}