"""APEX V18 — verify Position __init__ patch."""
from __future__ import annotations
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from broker._sdk_patches import apply_sdk_patches, _PATCH_SENTINEL


def _ok(msg: str) -> None:
    print(f"  ok  {msg}")


def test_apply_idempotent_and_filters_unknown_kwargs():
    apply_sdk_patches()  # first call applies
    apply_sdk_patches()  # second call no-ops

    from project_x_py.models import Position
    assert getattr(Position, _PATCH_SENTINEL, False)

    # Repro the bug: unknown kwargs no longer raise
    p = Position(
        id=1, accountId=1001, contractId="CON.F.US.MNQ.U25",
        creationTimestamp="2026-05-08T10:00:00Z",
        type=1, size=2, averagePrice=22000.0,
        contractDisplayName="Micro NASDAQ-100",  # the new field
        someFutureField="forward-compat",
    )
    assert p.contractId == "CON.F.US.MNQ.U25"
    assert p.size == 2
    assert p.direction == "LONG"
    # Unknown fields NOT stored on the instance
    assert not hasattr(p, "contractDisplayName")
    assert not hasattr(p, "someFutureField")
    _ok("Position(**unknown_kwargs) ignored, known fields preserved")


def test_required_fields_still_strict():
    apply_sdk_patches()
    from project_x_py.models import Position
    try:
        Position(id=1, accountId=1, contractId="x",
                 creationTimestamp="t", type=1, size=2)  # missing averagePrice
    except TypeError:
        _ok("required-field validation still strict (missing kwarg -> TypeError)")
        return
    raise AssertionError("Position should have rejected missing averagePrice")


def main() -> int:
    print("test_sdk_patches.py")
    test_apply_idempotent_and_filters_unknown_kwargs()
    test_required_fields_still_strict()
    print("ALL TESTS PASSED")
    return 0


if __name__ == "__main__":
    sys.exit(main())
