import os
import subprocess
import re
import ctypes
import urllib 
import ssl
class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))
    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)
with disable_file_system_redirection():
	ver = subprocess.Popen('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration"',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
	r,e=ver.communicate()
	if e:
		print e
	else:

		filtered_value = re.findall("Platform.+",r)
		version = (filtered_value[-1].split())[-1]
		cmd = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
		res,err=cmd.communicate()
		if err:
			print err
		else:
			val = re.findall("OUTLOOK.+",res)
			if val == []:
				pass
			else:
				value = (val[-1].strip().split())
				command = "Taskkill /F /IM"+" "+value[0]
				cmd_1 = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
				res_1,err_1 = cmd_1.communicate()
				if err_1:
					print err_1
				else:
					print "outlook closed"

		url_64 = "https://script-downloads.itarian.com/mimecast_outlook/Mimecast%20for%20Outlook%207.10.0.72%20%28x64%29.msi"
		url_32 = "https://script-downloads.itarian.com/mimecast_outlook/Mimecast%20for%20Outlook%207.10.0.72%20%28x86%29.msi"



		obj=subprocess.Popen("wmic os get osarchitecture",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
		result,error=obj.communicate()
		if error:
			print(error)
		else:
			operating_system = result.split()

		if '64-bit' in operating_system and version == "x64":
			print("64 bit operating system")
			print('File Downloading')
			destination = "C:\\Users\\mimecast_64.msi"
			gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
			download = urllib.urlretrieve(url_64,destination,context = gcontext)
			print('File downloaded')
			save_path = 'C:\\Users'
			file_name = "test.bat"
			completeName = os.path.join(save_path, file_name)
			file1 = open(completeName, "w+")
			file1.write('''@echo off
						msiexec /i c:\users\mimecast_64.msi /quiet /qn /log c:\users\install.log
						''')
			file1.close()
			cmd = subprocess.Popen(completeName,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
			result_1,error_1=cmd.communicate()
			if error_1:
				print(error_1)
			else:
				print("Mimecast for outlook (64) installed")
				

		elif '64-bit' in operating_system and version == "x86":
			print('File Downloading')
			destination = "C:\\Users\\mimecast_32.msi"
			gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
			download = urllib.urlretrieve(url_32,destination,context = gcontext)
			print('File downloaded')
			save_path = 'C:\\Users'
			file_name = "test.bat"
			completeName = os.path.join(save_path, file_name)
			file1 = open(completeName, "w+")
			file1.write('''@echo off
						msiexec /i c:\users\mimecast_32.msi /quiet /qn /log c:\users\install.log
						''')
			file1.close()
			cmd = subprocess.Popen(completeName,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
			result_2,error_2=cmd.communicate()
			if error_2:
				print(error_2)
			else:
				print("Mimecast for outlook (32) installed")
				

		else:
			print("32 bit operating system")
			print('File Downloading')
			destination = "C:\\Users\\mimecast_32.msi"
			gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
			download = urllib.urlretrieve(url_32,destination,context = gcontext)
			print('File downloaded')
			save_path = 'C:\\Users'
			file_name = "test.bat"
			completeName = os.path.join(save_path, file_name)
			file1 = open(completeName, "w+")
			file1.write('''@echo off
						msiexec /i c:\users\mimecast_32.msi /quiet /qn /log c:\users\install.log
						''')
			file1.close()
			cmd = subprocess.Popen(completeName,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
			result_2,error_2=cmd.communicate()
			if error_2:
				print(error_2)
			else:
				print("Mimecast for outlook (32) installed")
				
