import logging
from typing import Dict
import requests

logger = logging.getLogger("desktopenv.getters.general")


async def get_vm_command_line(env, config: Dict[str, str]):
    vm_ip = env.vm_ip
    port = env.server_port
    command = config["command"]
    shell = config.get("shell", False)

    response = requests.post(f"http://{vm_ip}:{port}/execute", json={"command": command, "shell": shell})

    print(response.json())

    if response.status_code == 200:
        return response.json()["output"]
    else:
        logger.error("Failed to get vm command line. Status code: %d", response.status_code)
        return None

async def get_vm_command_error(env, config: Dict[str, str]):
    vm_ip = env.vm_ip
    port = env.server_port
    command = config["command"]
    shell = config.get("shell", False)

    response = requests.post(f"http://{vm_ip}:{port}/execute", json={"command": command, "shell": shell})

    print(response.json())

    if response.status_code == 200:
        return response.json()["error"]
    else:
        logger.error("Failed to get vm command line error. Status code: %d", response.status_code)
        return None


async def get_vm_terminal_output(env, config: Dict[str, str]):
    return await env.controller.get_terminal_output()
