import _winreg
import ctypes

browserlist = itsm.getParameter("browserlist")
v = int(itsm.getParameter("v"))  # 0 = block, 1 = unblock


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)


# ==========================================================
# STRICT browser definitions (ONLY these names are accepted)
# ==========================================================
BROWSER_POLICIES = {
    "GOOGLECHROME": {
        "key": r"SOFTWARE\Policies\Google\Chrome\ExtensionInstallBlocklist",
        "value": "1",
        "type": _winreg.REG_SZ,
        "data": "*"
    },
    "MSEDGE": {
        "key": r"SOFTWARE\Policies\Microsoft\Edge\ExtensionInstallBlocklist",
        "value": "1",
        "type": _winreg.REG_SZ,
        "data": "*"
    },
    "BRAVE": {
        "key": r"SOFTWARE\Policies\BraveSoftware\Brave\ExtensionInstallBlocklist",
        "value": "1",
        "type": _winreg.REG_SZ,
        "data": "*"
    },
    "OPERA": {
        "key": r"SOFTWARE\Policies\Opera Software\Opera\ExtensionInstallBlocklist",
        "value": "1",
        "type": _winreg.REG_SZ,
        "data": "*"
    },
    "MOZILLA": {
        "key": r"SOFTWARE\Policies\Mozilla\Firefox",
        "value": "DisableAddons",
        "type": _winreg.REG_DWORD,
        "data": 1
    }
}


def block_extensions(policy):
    key = _winreg.CreateKeyEx(
        _winreg.HKEY_LOCAL_MACHINE,
        policy["key"],
        0,
        _winreg.KEY_ALL_ACCESS
    )
    _winreg.SetValueEx(
        key,
        policy["value"],
        0,
        policy["type"],
        policy["data"]
    )


def unblock_extensions(policy):
    key = _winreg.OpenKey(
        _winreg.HKEY_LOCAL_MACHINE,
        policy["key"],
        0,
        _winreg.KEY_ALL_ACCESS
    )
    _winreg.DeleteValue(key, policy["value"])


with disable_file_system_redirection():
    requested_browsers = [
        b.strip().upper()
        for b in browserlist.split(",")
        if b.strip()
    ]

    for browser in requested_browsers:
        if browser not in BROWSER_POLICIES:
            print("INVALID browser name:", browser)
            continue

        try:
            if v == 0:
                block_extensions(BROWSER_POLICIES[browser])
                print(browser, ": extensions BLOCKED")
            else:
                unblock_extensions(BROWSER_POLICIES[browser])
                print(browser, ": extensions UNBLOCKED")
        except Exception as e:
            print(browser, ": ERROR ->", e)
