import sys
import logging

try:
    from worker.stylist_engine import StylistEngine
except ImportError:
    print("❌ LỖI: Không import được StylistEngine. Chạy script này từ thư mục backend/.")
    sys.exit(1)

logging.basicConfig(level=logging.INFO)

def main():
    engine = StylistEngine()
    catalog = engine._get_catalog()
    
    # 1. Tìm các sản phẩm để test
    adult_nam = None
    adult_nu = None
    kid_sp = None

    for p in catalog:
        gender = str(p.get("gender") or "").lower()
        age = str(p.get("age_group") or "").lower()
        name = str(p.get("name") or "").lower()

        if not adult_nam and (gender == 'nam' or gender == 'men') and 'bé' not in name and 'kid' not in age:
            adult_nam = p
        elif not adult_nu and (gender == 'nữ' or gender == 'nu' or gender == 'women') and 'bé' not in name and 'kid' not in age:
            adult_nu = p
        elif not kid_sp and ('bé' in name or 'kid' in age):
            kid_sp = p
            
        if adult_nam and adult_nu and kid_sp:
            break

    test_subjects = [
        ("Người lớn (Nam)", adult_nam),
        ("Người lớn (Nữ)", adult_nu)
    ]
    
    passed = True
    print("\n" + "="*50)
    print("🚀 BẮT ĐẦU CHẤM ĐIỂM FASHION MATCHES (EVAL) 🚀")
    print("="*50)

    for label, subj in test_subjects:
        if not subj:
            continue
            
        code = subj['code']
        print(f"\n👉 Test Case: {label}")
        print(f"   Sản phẩm gốc: {subj['name']} (Mã: {code})")
        print(f"   Gender: {subj.get('gender')}")
        
        matches = engine.compute_dynamic_rule_matches(code)
        
        # Test 1: Khắc khe loại trừ đồ trẻ em
        found_kid_error = False
        if matches:
            for occ, roles in matches.items():
                for role, items in roles.items():
                    for item in items:
                        item_name = str(item.get('name') or "").lower()
                        item_gender = str(item.get('gender') or "").lower()
                        item_age = str(item.get('age_group') or "").lower()
                        
                        if 'bé' in item_name or 'bé' in item_gender or 'be' in item_gender or 'kid' in item_age:
                            print(f"   ❌ FAILED [Nhầm độ tuổi]: Phối đồ {label} nhưng lòi ra đồ trẻ em!")
                            print(f"      - Đồ bị lọt: {item['code']} | {item_name} (Gender: {item_gender})")
                            found_kid_error = True
                            passed = False
                            
        if not found_kid_error:
            print("   ✅ PASS: Không dính đồ trẻ em trong gợi ý phối.")
            
        # Test 2: Super Classifications SQL có lọt đồ trẻ con không?
        classifications = engine.compute_super_classifications_sql(code)
        found_sql_kid_error = False
        if classifications:
            for group, g_dict in classifications.items():
                for key, items in g_dict.items():
                    for item in items:
                        item_name = str(item.get('name') or "").lower()
                        item_gender = str(item.get('gender_by_product') or "").lower()
                        
                        if 'bé' in item_name or 'kid' in item_gender:
                            print(f"   ❌ FAILED [Raw SQL SQL]: Bảng màu/chất liệu lôi lộn đồ kids lên.")
                            print(f"      - Đồ bị lọt: {item['magento_ref_code']} | {item_name}")
                            found_sql_kid_error = True
                            passed = False
                            
        if not found_sql_kid_error:
            print("   ✅ PASS: Raw SQL (Phân nhóm Color/Material) đã sạch đồ trẻ em.")

    print("\n" + "="*50)
    if passed:
        print("🎉 TẤT CẢ TEST ĐỀU XANH! BÁO CÁO DONE VỚI RALPH LIỀN!! 🎉")
        sys.exit(0)
    else:
        print("💥 CÒN RÁC! NGỒI ĐÓ MÀ SỬA TIẾP ĐI CLAUDE! 💥")
        sys.exit(1)

if __name__ == "__main__":
    main()
