import subprocess

class Motor:
    """
    Ator do sistema: executa comandos controlados (whitelist).
    Mantém-se minimal até termos política de segurança mais rica.
    """
    SAFE_CMDS = {
        "echo": ["echo"],
        "sh": ["/bin/sh"],  # shell interativo (init)
    }

    def run(self, cmd: str, args: list[str] | None = None) -> dict:
        prog = self.SAFE_CMDS.get(cmd)
        if not prog:
            return {"ok": False, "error": f"cmd '{cmd}' não permitido"}
        try:
            full = prog + (args or [])
            res = subprocess.run(full, capture_output=True, text=True)
            return {
                "ok": res.returncode == 0,
                "code": res.returncode,
                "stdout": res.stdout,
                "stderr": res.stderr,
            }
        except Exception as e:
            return {"ok": False, "error": str(e)}
