"""
test_plate_logic.py — ทดสอบตรรกะ Regex/การล้างข้อความ โดยไม่ต้องโหลดโมเดล AI

รัน:  python test_plate_logic.py
ใช้ตรวจว่าตัวกรองยัง "ไม่หลุด" ไปจับสติกเกอร์/เบอร์โทรข้างรถ หลังจากแก้โค้ด
"""
import sys

from app import plate_utils as pu

# คอนโซล Windows ภาษาไทย (cp874) พิมพ์ ✓ ✗ → ไม่ได้ จะ crash เป็น UnicodeEncodeError
# จึงใช้เครื่องหมาย ASCII ล้วน และบังคับ stdout เป็น UTF-8 เผื่อข้อความไทย
try:
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")
except (AttributeError, ValueError):
    pass

PASS = FAIL = 0


def check(label, got, want):
    global PASS, FAIL
    ok = got == want
    PASS, FAIL = PASS + ok, FAIL + (not ok)
    if ok:
        print(f"  [OK]   {label}  ->  {got!r}")
    else:
        print(f"  [FAIL] {label}\n         ได้: {got!r}   ต้องการ: {want!r}")


print("\n[1] หาเลขทะเบียนรถบรรทุกจากข้อความที่ OCR อ่านได้")
check("ป้ายมาตรฐานมีขีด",        pu.find_truck_plate(["70-1234", "สระบุรี"]),         "70-1234")
check("ไม่มีขีด",                pu.find_truck_plate(["701234"]),                     "70-1234")
check("มีช่องว่างแทนขีด",        pu.find_truck_plate(["71 5566", "ชลบุรี"]),          "71-5566")
check("หมวด 8x",                pu.find_truck_plate(["82.9012"]),                    "82-9012")
check("OCR แยกบรรทัด",          pu.find_truck_plate(["85", "4321", "ระยอง"]),        "85-4321")
check("ตัว O อ่านเป็นเลข 0",     pu.find_truck_plate(["7O-l234"]),                    "70-1234")
check("มีอักขระขยะปนมา",         pu.find_truck_plate(["*#70—1234*", "TOYOTA"]),       "70-1234")

print("\n[2] ต้องไม่จับผิด (สติกเกอร์ / เบอร์โทร / ป้ายรถยนต์ทั่วไป)")
check("ป้ายขาวรถยนต์",          pu.find_truck_plate(["กข 1234", "กรุงเทพมหานคร"]),   None)
check("หมวดนอกช่วงที่ตั้งไว้",   pu.find_truck_plate(["60-1234"]),                    None)
check("หมวด 6x",                pu.find_truck_plate(["69-1234"]),                    None)
check("ข้อความล้วน",            pu.find_truck_plate(["ปลอดภัยไว้ก่อน", "TRUCK"]),    None)

print("\n[3] ล้างอักขระพิเศษ")
check("ลบสัญลักษณ์แปลก",        pu.clean_text("**70-1234**  @#$"),                   "70-1234")
check("คงอักษรไทยไว้",          pu.clean_text("70-1234 สระบุรี!!"),                  "70-1234 สระบุรี")

print("\n[4] เลขทะเบียนที่พนักงานพิมพ์เอง")
check("6 หลักล้วน",             pu.normalize_manual_plate("701234"),                 "70-1234")
check("มีขีดและช่องว่าง",        pu.normalize_manual_plate("  70 - 1234 "),          "70-1234")
check("สั้นเกินไป",             pu.normalize_manual_plate("7012"),                   None)
check("หมวดนอกช่วง",           pu.normalize_manual_plate("051234"),                 None)

print("\n[5] ดึงชื่อจังหวัด")
check("เจอจังหวัด",             pu.extract_province(["70-1234", "สระบุรี"]),         "สระบุรี")
check("ไม่มีจังหวัด",           pu.extract_province(["70-1234"]),                    None)

print(f"\n{'='*54}\nสรุป: ผ่าน {PASS} / ล้มเหลว {FAIL}\n{'='*54}\n")
sys.exit(1 if FAIL else 0)
