# PyActuator 0.0.17. python -m pip install 'pyactuator[mcp]==0.0.17'
import json
from decimal import Decimal

from pyactuator.core.audit import AuditQueryFilters
from pyactuator.core.policy import LimitNotional
from pyactuator.store.sqlite_audit import SqliteAuditWriter
from pyactuator.sync import invoke, run

audit = SqliteAuditWriter("audit.sqlite")
result = invoke(
    "pyactuator.trading.place_order",
    {
        "symbol": "DEMO",
        "side": "buy",
        "quantity": "100",
        "order_type": "limit",
        "limit_price": "250",
        "client_order_id": "demo-order-001",
    },
    policy_enforcer=LimitNotional(Decimal("10000")),
    audit_writer=audit,
)
record = run(audit.query(AuditQueryFilters(tag="policy_denied", limit=1))).records[0]
print(
    json.dumps(
        {
            "success": result["success"],
            "code": result["error"]["code"],
            "message": result["error"]["message"],
            "adapter_class": result["adapter"]["class"],
            "adapter_real": result["adapter"]["real"],
            "audit_operation": record.operation,
            "audit_success": record.success,
            "audit_tags": list(record.tags),
        },
        indent=2,
    )
)
