from dataclasses import dataclass

from .policy import Risk


@dataclass(frozen=True, slots=True)
class ComputerToolDefinition:
    name: str
    permission: str
    risk: Risk
    is_write: bool
    access_type: str


COMPUTER_TOOLS = {
    "observe": ComputerToolDefinition(
        "observe", "computer.observe", Risk.LOW, False, "read"
    ),
    "navigate": ComputerToolDefinition(
        "navigate", "computer.observe", Risk.LOW, False, "control"
    ),
    "wait_for": ComputerToolDefinition(
        "wait_for", "computer.observe", Risk.LOW, False, "read"
    ),
    "extract": ComputerToolDefinition(
        "extract", "computer.observe", Risk.LOW, False, "read"
    ),
    "tab_list": ComputerToolDefinition(
        "tab_list", "computer.observe", Risk.LOW, False, "read"
    ),
    "screenshot": ComputerToolDefinition(
        "screenshot", "computer.observe", Risk.LOW, False, "read"
    ),
    "click": ComputerToolDefinition(
        "click", "computer.control", Risk.MEDIUM, True, "write"
    ),
    "type": ComputerToolDefinition(
        "type", "computer.control", Risk.MEDIUM, True, "write"
    ),
    "press": ComputerToolDefinition(
        "press", "computer.control", Risk.MEDIUM, True, "write"
    ),
    "tab_open": ComputerToolDefinition(
        "tab_open", "computer.control", Risk.LOW, True, "control"
    ),
    "tab_switch": ComputerToolDefinition(
        "tab_switch", "computer.control", Risk.LOW, True, "control"
    ),
    "tab_close": ComputerToolDefinition(
        "tab_close", "computer.control", Risk.LOW, True, "control"
    ),
}


AGENT_COMPUTER_TOOLS = {f"browser.{name}": definition for name, definition in COMPUTER_TOOLS.items()}
