import sys

from app.schemas.common import ScreenFilter, ScreenRequest


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


# 16 = current Quality preset size.
r16 = ScreenRequest(
    filters=[make_filter() for _ in range(16)],
    logic="AND",
)

assert len(r16.filters) == 16
print("16 filters accepted: PASS")


# 20 = exact configured maximum.
r20 = ScreenRequest(
    filters=[make_filter() for _ in range(20)],
    logic="AND",
)

assert len(r20.filters) == 20
print("20 filters accepted: PASS")


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


# 48 chars = exact configured maximum.
metric48 = "x" * 48

f48 = make_filter(metric48)

assert f48.metric == metric48
print("48-char metric accepted: PASS")


# 49 chars = must be rejected.
try:
    make_filter("x" * 49)
except Exception as exc:
    print("49-char metric rejected: PASS")
    print("  exception:", type(exc).__name__)
else:
    print("49-char metric rejected: FAIL")
    sys.exit(1)


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