import re
import os
import subprocess
import ctypes
import platform
import _winreg
import time
from datetime import datetime
from datetime import timedelta

users = ["IAP","Installer"] ## Change the user names here which you want to remove from your device
Endpoint_name = "The IAP Support App" ## Change your Endpoint Manager Communication Client Name
Desktop_shortcut  = "IAP Remote Access" ## Change your desktop shortcut icon name here which you want to remove
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():
	for i in users:
		command = 'net user '+i+' /DELETE'
		cmd = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
		res,err = cmd.communicate()
		if err:
		    print(err)
		else:
			print(i+' User account deleted')

###################### Uninstalling ITARIAN REMOTE ACCESS ##########################################

def gid(x1):
    find=x1
    winreg = _winreg
    REG_PATH1 = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    REG_PATH2 = r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
    registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH1, 0, winreg.KEY_READ)
    winreg.CloseKey(registry_key)
    name = []
    string=[]
    try:
        registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH1, 0, winreg.KEY_READ)
        i=0

        while True:
            try:
                sub_registry_key = winreg.EnumKey(registry_key, i)
                newpath1 = REG_PATH1 + '\\' + sub_registry_key
                new_registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, newpath1, 0, winreg.KEY_READ)
                try:
                    DisplayName, getname = winreg.QueryValueEx(new_registry_key, 'DisplayName')
                    UninstallString, getname = winreg.QueryValueEx(new_registry_key, 'UninstallString')
                    winreg.CloseKey(new_registry_key)
                    name.append(DisplayName)
                    string.append( UninstallString )
                except:
                    pass
                i += 1
            except:
                break
    except:
        pass
    try:
        registry_key1 = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH2, 0, winreg.KEY_READ)
        ii=0
        while True:
            try:
                sub_registry_key1 = winreg.EnumKey(registry_key1, ii)
                newpath2 = REG_PATH2 + '\\' + sub_registry_key1
                new_registry_key1 = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, newpath2, 0, winreg.KEY_READ)
                try:
                    DisplayName1, getname = winreg.QueryValueEx(new_registry_key1, 'DisplayName')
                    UninstallString1, getname = winreg.QueryValueEx(new_registry_key1, 'UninstallString')
                    winreg.CloseKey(new_registry_key1)
                    name.append(DisplayName1)
                    string.append(UninstallString1 )
                except:
                    pass
                ii += 1
            except:
                break
    except:
        pass        
    try:
        registry_key2 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, REG_PATH1, 0, winreg.KEY_READ)
        iii=0
        while True:
            try:
                sub_registry_key2 = winreg.EnumKey(registry_key2, iii)
                newpath3 = REG_PATH1 + '\\' + sub_registry_key2
                new_registry_key2 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, newpath3, 0, winreg.KEY_READ)
                try:
                    DisplayName2, getname = winreg.QueryValueEx(new_registry_key2, 'DisplayName')
                    UninstallString2, getname = winreg.QueryValueEx(new_registry_key2, 'UninstallString')
                    winreg.CloseKey(new_registry_key2)
                    name.append( DisplayName2)
                    string.append(UninstallString2 )
                except:
                    pass
                iii += 1
            except:
                break
    except:
        pass
    try:
        registry_key3 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, REG_PATH2, 0, winreg.KEY_READ)
        iiii=0
        while True:
            try:
                sub_registry_key3 = winreg.EnumKey(registry_key3, iiii)
                newpath4 = REG_PATH2 + '\\' + sub_registry_key3
                new_registry_key3 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, newpath4, 0, winreg.KEY_READ)
                try:
                    DisplayName3, getname = winreg.QueryValueEx(new_registry_key3, 'DisplayName')
                    UninstallString3, getname = winreg.QueryValueEx(new_registry_key3, 'UninstallString')
                    winreg.CloseKey(new_registry_key3)
                    name.append( DisplayName3 )
                    string.append(UninstallString3)
                except:
                    pass
                iiii += 1
            except:
                break
    except:
        pass
    x=''
    out={}

    
    for i in name:
        if find.lower() in i.lower():
            x=i
     
    if x:
        for k,v in zip(name,string):

            if k == 'ITarian Remote Access' :
                if "ITarianRemoteAccessSetup.exe" in v:
                    out[k] = v 
                else:
                    pass 
            else:
                out[k] = v
        x1=out[x]
        return x1

ustring=gid('ITarian Remote Access')
if not ustring is None:
    print 'ITarian Remote Access is found in the System'
    print "\n\t\t *) Uninstallation started..."
    qstring=gid('ITarian Remote Access')
    qstring=qstring+' /quiet'
    if qstring:
        os.popen(qstring)
    else:
        print "\n\t\t *) Quiet uninstall string not found"
    time.sleep(15)
    check=gid('ITarian Remote Access')
    if check is None:
        print "\n\t\t *) ITarian Remote Access is Successfully Uninstalled in the System"    
if ustring is None:
    print "ITarian Remote Access is not found in the System"

############################### Uninstalling Endpoint Manager Communication Client ##################################

cmd = subprocess.Popen('wmic product get name',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
res,err = cmd.communicate()
if err:
	print(err)
else:
	value = res.splitlines()
org = []
for j in value:
    if j.strip() == Endpoint_name :
        org.append(j.strip())
    else:
        pass 
if len(org)>0:
    print "Endpoint Manager Communication Client present in your device"
    save_path = 'C:\\ProgramData'
    file_name = "Endpoint.bat"
    completeName = os.path.join(save_path, file_name)
    file1 = open(completeName, "w+")
    file1.write('''@echo off
                    wmic product where name="'''+Endpoint_name+'''" call uninstall
                    ''')
    file1.close()
    current_time = datetime.now()
    n = 2
    future_time = current_time + timedelta(minutes=n)
    future_time_str = future_time.strftime(' %H:%M:%S')
    command = 'schtasks /ru "SYSTEM" /create /tn Endpoint /tr c:\ProgramData\Endpoint.bat /sc once /st '+future_time_str+' /F'
    cmd = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    res,err = cmd.communicate()
    if err:
        print(err)
    else:
        print("Uninstalling Endpoint Manager Communication Client............")
        print("Endpoint Manager Communication Client will be uninstalled in 5 minutes.. ")
else:
    print "Endpoint Manager Communication Client is not installed in your device"

try:
    os.remove("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\ITarian\\ITarian Endpoint Manager Communication Client.lnk")
except :
    pass 

try:
    os.remove("C:\\Users\\Public\\Desktop\\"+Desktop_shortcut+".lnk")
except :
    pass