#!/usr/bin/python2 -O

import collections

import qubes.vm

system_hooks = collections.defaultdict(list)

def hook(event, vm=None, system=False):
    def decorator(f):
        f.ho_event = event

        if system:
            f.ho_vm = None
        elif vm is None:
            f.ho_vm = qubes.vm.BaseVM
        else:
            f.ho_vm = vm

        return f

    return decorator

def ishook(o):
    return callable(o) \
        and hasattr(o, 'ho_event') \
        and hasattr(o, 'ho_vm')

def add_system_hook(event, f):
    global_hooks[event].append(f)

def fire_system_hooks(event, *args, **kwargs):
    for hook in system_hooks[event]:
        hook(self, *args, **kwargs)