"""
Test gender + age_group filter logic in _pass_hard_filter
Rules:
  - nữ  <-> nữ      ✅
  - nam <-> nam     ✅
  - unisex <-> nữ   ✅
  - unisex <-> nam  ✅
  - unisex <-> unisex ✅
  - nữ  <-> nam     ❌
  - trẻ em <-> người lớn ❌ (any gender)
"""
import sys, os
sys.path.insert(0, os.path.dirname(__file__))

from worker.stylist_engine import StylistEngine

engine = StylistEngine()

def p(gender="", age_group="", product_line="Áo phông", code="X"):
    return {"code": code, "gender": gender, "age_group": age_group, "product_line": product_line}

cases = [
    # (src_gender, src_age, tgt_gender, tgt_age, expected, label)
    ("nữ",     "",         "nữ",           "",           True,  "nữ <-> nữ"),
    ("nam",    "",         "nam",          "",           True,  "nam <-> nam"),
    ("unisex", "",         "nữ",           "",           True,  "unisex <-> nữ"),
    ("unisex", "",         "nam",          "",           True,  "unisex <-> nam"),
    ("nữ",     "",         "unisex",       "",           True,  "nữ <-> unisex"),
    ("unisex", "",         "unisex",       "",           True,  "unisex <-> unisex"),
    ("nữ",     "",         "nam",          "",           False, "nữ <-> nam ❌"),
    ("nam",    "",         "nữ",           "",           False, "nam <-> nữ ❌"),
    # unisex trẻ em phải bị chặn khi ghép với người lớn
    ("nữ",     "",         "unisex trẻ em","",           False, "nữ <-> unisex trẻ em ❌"),
    ("nam",    "",         "unisex trẻ em","",           False, "nam <-> unisex trẻ em ❌"),
    # Trẻ em + trẻ em → ok
    ("unisex trẻ em","",  "unisex trẻ em","",           True,  "trẻ em <-> trẻ em ✅"),
    # age_group field path
    ("nữ",     "người lớn","nữ",           "trẻ em",    False, "nữ người lớn <-> nữ trẻ em ❌"),
    ("nữ",     "trẻ em",   "nữ",           "trẻ em",    True,  "nữ trẻ em <-> nữ trẻ em ✅"),
]

all_pass = True
for sg, sa, tg, ta, expected, label in cases:
    src = p(gender=sg, age_group=sa, code="SRC")
    tgt = p(gender=tg, age_group=ta, code="TGT")
    result = engine._pass_hard_filter(src, tgt)
    ok = result == expected
    icon = "✅" if ok else "❌ FAIL"
    if not ok:
        all_pass = False
    print(f"  {icon}  {label:45s}  → got={result} expected={expected}")

print()
print("=" * 60)
print("ALL PASS" if all_pass else "SOME TESTS FAILED!")
