# -*- coding: utf-8 -*-
from psutil import Process, wait_procs, NoSuchProcess
from SeleniumLibrary.base.robotlibcore import DynamicCore, keyword
from SeleniumTestability.types import ProcessType


class Helpers(DynamicCore):
    def __init__(self: "Helpers") -> None:
        DynamicCore.__init__(self, [])

    @keyword
    def die_die_die(self: "Helpers", parent: ProcessType) -> None:
        if isinstance(parent, int):
            try:
                par = Process(parent)
            except NoSuchProcess:
                self.warn("Unable to kill process id:{}".format(parent))
                return
        else:
            par = parent
        for child_process in par.children():
            self.die_die_die(child_process)
            if child_process.is_running():
                child_process.terminate()
                _, alive = wait_procs([child_process], timeout=3)
                for p in alive:
                    p.kill()