import sys

from app.schemas.common import ScreenFilter, ScreenRequest


def make_filter(metric="roic"):
    return ScreenFilter(
        metric=metric,
        op="gt",
        value=0.1,
    )


# ------------------------------------------------------------
# 16 filters — Quality preset size — MUST PASS
# ------------------------------------------------------------

r16 = ScreenRequest(
    filters=[make_filter() for _ in range(16)],
    logic="and",
)

print("16 filters:", len(r16.filters))

assert len(r16.filters) == 16


# ------------------------------------------------------------
# 20 filters — maximum allowed — MUST PASS
# ------------------------------------------------------------

r20 = ScreenRequest(
    filters=[make_filter() for _ in range(20)],
    logic="and",
)

print("20 filters:", len(r20.filters))

assert len(r20.filters) == 20


# ------------------------------------------------------------
# 21 filters — MUST FAIL validation
# ------------------------------------------------------------

try:
    ScreenRequest(
        filters=[make_filter() for _ in range(21)],
        logic="and",
    )
except Exception as exc:
    print("21 filters rejected: PASS")
    print(type(exc).__name__)
else:
    print("21 filters rejected: FAIL")
    sys.exit(1)


# ------------------------------------------------------------
# metric length <= 48 — MUST PASS
# ------------------------------------------------------------

valid_metric = "x" * 48

f48 = make_filter(valid_metric)

assert f48.metric == valid_metric

print("48-char metric accepted: PASS")


# ------------------------------------------------------------
# metric length 49 — MUST FAIL validation
# ------------------------------------------------------------

try:
    make_filter("x" * 49)
except Exception as exc:
    print("49-char metric rejected: PASS")
    print(type(exc).__name__)
else:
    print("49-char metric rejected: FAIL")
    sys.exit(1)


print("REAL PYDANTIC SL-015 TEST: PASS")
