Siêu công cụ tìm kiếm sản phẩm CANIFA - Hỗ trợ Parallel Multi-Search.

⚠️⚠️⚠️ QUY TẮC BẮT BUỘC ⚠️⚠️⚠️

1. TUYỆT ĐỐI CẤM BỊA MÃ SẢN PHẨM — Chỉ đề cập khi tool trả về
2. LUÔN GỌI TOOL khi user hỏi về sản phẩm — KHÔNG đoán/nhớ
3. Không tìm thấy → nói thật, gợi ý tiêu chí khác
4. AI_RESPONSE chỉ sinh SAU KHI có kết quả tool

QUY TẮC SINH QUERIES:
- 1 món → 1 Query
- Set đồ/phối đồ → 2-3 Queries song song

═══════════════════════════════════════════════════════════════
⚠️ PHÂN BIỆT: `description` vs SQL FILTER
═══════════════════════════════════════════════════════════════

🔍 `description` — SEMANTIC SEARCH (format DB columns):
  product_name: [tên SP]. description_text: [mô tả chi tiết SP].
  material_group: [chất liệu]. season: [mùa]. style: [phong cách].
  fitting: [dáng]. form_neckline: [cổ]. form_sleeve: [tay]. product_line_vn: [dòng SP].

⚠️ description_text BẮT BUỘC LUÔN CÓ — mô tả ngắn gọn sản phẩm, dùng cho semantic search!
⚠️ KHÔNG đưa gender_by_product, age_by_product, master_color vào description — đó là SQL FILTER!

🔒 SQL FILTER (tách riêng, KHÔNG đưa vào description):
- product_name: Tên sản phẩm. Chỉ điền khi khách cung cấp tên cụ thể.
- gender_by_product — women, men, boy, girl, unisex, newborn
- age_by_product — adult, kid, others
- master_color — Màu sản phẩm. Gửi CHÍNH XÁC từ khách nói (VD: 'trắng', 'đen', 'xanh'). Tool tự match DB.
- price_min / price_max — Khoảng giá VND
- discount_min / discount_max — % giảm giá
- magento_ref_code — Mã SKU chính xác
- product_line_vn — Dòng SP RỘNG. Dùng LIKE prefix nên chỉ cần "Áo", "Quần", "Váy"
- discovery_mode — "new" (hàng mới) hoặc "best_seller" (bán chạy). Chỉ dùng khi khách NÓI RÕ!

═══════════════════════════════════════════════════════════════
🆕🔥 discovery_mode — HÀNG MỚI / BÁN CHẠY
═══════════════════════════════════════════════════════════════

TRIGGER WORDS (phát hiện 1 trong các từ này → dùng discovery_mode):
- Hàng mới: "mới nhất", "hàng mới", "mới về", "new arrival", "có gì mới", "mới ra"
- Bán chạy: "bán chạy", "best seller", "hot nhất", "mọi người hay mua", "sản phẩm hot"

GIÁ TRỊ: discovery_mode="new" HOẶC discovery_mode="best_seller"
Nếu khách KHÔNG nói → KHÔNG điền (để None)

VÍ DỤ discovery_mode:
- "Áo phông mới nhất?" → description: "product_name: Áo phông. description_text: Áo phông mới nhất", product_line_vn: "Áo phông", discovery_mode: "new"
- "Quần jean bán chạy cho nam?" → description: "product_name: Quần jean. description_text: Quần jean nam bán chạy", product_line_vn: "Quần jean", gender: "men", discovery_mode: "best_seller"
- "Áo dự tiệc nào bán nhiều nhất?" → description: "product_name: Áo. description_text: Áo đi dự tiệc sang trọng. style: Feminine", product_line_vn: "Áo", discovery_mode: "best_seller"
- "Best seller tháng này?" → description: "product_name: Sản phẩm. description_text: Sản phẩm bán chạy nhất", discovery_mode: "best_seller"
- "Tìm áo phông nam" (KHÔNG nói mới/bán chạy) → discovery_mode: None (bình thường)

⚠️ best_seller — BẮT BUỘC hiển thị quantity_sold:
- TỪNG sản phẩm PHẢI có số lượng đã bán: "Đã bán 4.483 sp 🔥"
- VD: "👕 [8TP25A005]: Áo polo nam - 229k (giảm từ 399k) | Đã bán 4.483 sp 🔥"

═══════════════════════════════════════════════════════════════
🚨🚨🚨 QUY TẮC product_name — CỰC KỲ QUAN TRỌNG 🚨🚨🚨
═══════════════════════════════════════════════════════════════

product_name = CHÍNH XÁC CÂU USER NÓI, KHÔNG ĐƯỢC TỰ ĐỔI.

User nói "áo" → product_name: Áo (KHÔNG tự thêm "phông", "polo", "sơ mi"!)
User nói "quần" → product_name: Quần (KHÔNG tự thêm "jean", "khaki"!)
User nói "áo ngọ nguậy" → product_name: Áo ngọ nguậy
User nói "áo cá sấu" → product_name: Áo cá sấu
User nói "áo phông" → product_name: Áo phông (user NÓI RÕ thì mới dùng)
User nói "quần jean" → product_name: Quần jean (user NÓI RÕ thì mới dùng)

Chỉ CHUẨN HÓA khi user dùng từ đồng nghĩa RÕ RÀNG (bảng mapping dưới):

📋 BẢNG MAPPING SYNONYM → TÊN DB (tool tự xử lý, LLM giữ nguyên từ user):
  áo thun, áo thun ngắn tay, áo cổ v, áo cổ tym → Áo phông
  áo cổ bẻ → Áo Polo
  áo bra, áo ngực, áo quây → Áo lót
  áo gió, áo khoác mỏng → Áo khoác gió
  áo croptop, croptop, baby tee, áo lửng, áo dáng ngắn → Áo Body
  áo sát nách, tanktop, tank top, áo dây, áo 2 dây, áo hai dây → Áo ba lỗ
  đầm → Váy liền
  vớ → Tất
  quần đùi, quần short, quần lửng, quần ngố → Quần soóc
  quần jogger, quần ống bo chun → Quần nỉ
  quần chip, quần sịp, quần trong, quần nhỏ, quần xơ lít, quần xì, quần sơ lít, quần lót nữ, quần lót nam, quần lót trẻ em → Quần lót
  quần âu, quần vải, quần tây → Quần Khaki
  quần bò, quần jeans, denim, jeans, bò → Quần jean
  quần suông, quần ống rộng → Quần dài
  quần dài, chân váy dài, chân váy → Quần váy
  nón → Mũ
  đồ ngủ, đồ mặc nhà → Bộ mặc nhà
  đồ bộ → Bộ quần áo
  váy maxi, váy midi, chân váy dài → Chân váy
  găng tay → Găng tay chống nắng
  chăn → Chăn cá nhân
  phụ kiện, phụ kiện canifa → Mũ, Khăn, Tất, Găng tay (nhiều loại)

⚠️ Tool tự resolve synonym → DB value. LLM chỉ cần giữ NGUYÊN từ user nói!
⚠️ KHÔNG CHẮC → GIỮ NGUYÊN. KHÔNG TỰ SUY DIỄN LOẠI SẢN PHẨM!

═══════════════════════════════════════════════════════════════
📖 product_line_vn — PHÂN LOẠI RỘNG (SQL FILTER dùng LIKE prefix)
═══════════════════════════════════════════════════════════════

⚠️ product_line_vn = THỂ LOẠI RỘNG, KHÔNG phải loại cụ thể!
SQL dùng LIKE prefix: "Áo" sẽ match "Áo phông", "Áo Polo", "Áo Sơ mi"...

QUY TẮC:
- User nói "áo" chung → product_line_vn: "Áo" (match TẤT CẢ loại áo)
- User nói "quần" chung → product_line_vn: "Quần" (match tất cả loại quần)
- User nói "váy" chung → product_line_vn: "Váy" (match tất cả)
- User nói RÕ loại cụ thể "áo polo" → product_line_vn: "Áo Polo"
- User nói RÕ loại cụ thể "quần jean" → product_line_vn: "Quần jean"

KHÔNG TỰ THU HẸP: User nói "áo" → ĐỪNG tự đổi thành "Áo phông"!

Bảng tham khảo (chỉ dùng khi user NÓI RÕ loại):
ÁO: Áo phông, Áo Polo, Áo Sơ mi, Áo len, Áo nỉ, Áo khoác gió
QUẦN: Quần soóc, Quần jean, Quần Khaki, Quần dài, Quần nỉ
VÁY: Váy liền, Chân váy
BỘ: Bộ quần áo, Bộ mặc nhà
PHỤ KIỆN: Khăn, Mũ, Túi xách, Tất, Khẩu trang

═══════════════════════════════════════════════════════════════
📖 GIÁ TRỊ HỢP LỆ CỦA CÁC FIELD KHÁC
═══════════════════════════════════════════════════════════════

product_name: Tên sản phẩm. Chỉ điền khi khách cung cấp tên cụ thể.
master_color — Gửi CHÍNH XÁC màu khách nói (VD: 'trắng', 'đen'), tool tự match DB. ĐÂY LÀ SQL FILTER, KHÔNG đưa vào description!
style — Basic, Dynamic, Feminine, Utility, Smart Casual, Trend, Athleisure, Essential
fitting — Regular, Slimfit, Relax, Oversize, Skinny, Slim, Boxy, Baby tee
form_sleeve — Full length Sleeve, Short Sleeve, Sleeveless
form_neckline — Crew Neck, Classic Collar, V-neck, Hooded collar, Mock Neck/ High neck
material_group — Knit - Dệt Kim, Woven - Dệt Thoi, Yarn - Sợi
season — Fall Winter, Spring Summer, Year

═══════════════════════════════════════════════════════════════
⛔⛔⛔ TỐI HẬU THƯ — gender_by_product / age_by_product ⛔⛔⛔
═══════════════════════════════════════════════════════════════

CẤM TUYỆT ĐỐI tự suy diễn gender/age khi user CHƯA NÓI RÕ!

User nói "áo lót" → gender: null, age: null (CẤM tự điền "women"!)
User nói "áo bra" → gender: null, age: null (CẤM tự điền "women"!)
User nói "quần lót" → gender: null, age: null
User nói "áo phông" → gender: null, age: null
→ Vì có thể là cho nam, nữ, trẻ em — KHÔNG BIẾT thì KHÔNG ĐIỀN!

CHỈ ĐIỀN KHI USER NÓI RÕ:
- "áo lót nữ" → gender: "women"
- "áo lót trẻ em" → age: "kid"
- "áo phông nam" → gender: "men"
- "quần cho bé trai" → gender: "boy", age: "kid"

⚠️ GHI NHỚ: Để null = tìm TẤT CẢ (nam + nữ + trẻ em). Điền sai = MẤT kết quả!

═══════════════════════════════════════════════════════════════
📝 VÍ DỤ (description_text LUÔN CÓ!)
═══════════════════════════════════════════════════════════════

CASE 1: "Tìm áo đi chơi" (user chỉ nói "áo" — KHÔNG nói loại gì)
→ description: "product_name: Áo. description_text: Áo đi chơi thoải mái phong cách trẻ trung. style: Casual"
→ product_line_vn: "Áo" (RỘNG — match tất cả loại áo)
⚠️ KHÔNG tự đổi thành "Áo phông" hay "Áo Polo" — user đéo nói!

CASE 2: "Tìm áo ngọ nguậy"
→ description: "product_name: Áo ngọ nguậy. description_text: Áo ngọ nguậy thiết kế vui nhộn"
→ product_line_vn: "Áo"

CASE 3: "Áo phông nam màu trắng dáng regular" (user NÓI RÕ "áo phông")
→ description: "product_name: Áo phông. description_text: Áo phông nam dáng regular thoải mái. fitting: Regular"
→ master_color: "trắng"
→ gender_by_product: "men", age_by_product: "adult"
→ product_line_vn: "Áo phông"

CASE 4: "Váy nữ tính cho vợ, dưới 500k"
→ description: "product_name: Váy. description_text: Váy nữ tính sang trọng thanh lịch. style: Feminine"
→ gender_by_product: "women", age_by_product: "adult", price_max: 500000
→ product_line_vn: "Váy"

CASE 5: "Áo Polo ngắn tay basic cho nam, giảm giá 30-50%"
→ description: "product_name: Áo Polo. description_text: Áo Polo nam ngắn tay phong cách basic lịch sự. style: Basic. form_sleeve: Short Sleeve"
→ gender_by_product: "men", age_by_product: "adult", discount_min: 30, discount_max: 50
→ product_line_vn: "Áo Polo"

CASE 6: "Quần cho bé trai"
→ description: "product_name: Quần. description_text: Quần cho bé trai năng động thoải mái"
→ gender_by_product: "boy", age_by_product: "kid"
→ product_line_vn: "Quần"

CASE 7: "Set đồ công sở cho nữ" → 2 Queries:
  1. description: "product_name: Áo. description_text: Áo công sở nữ thanh lịch chuyên nghiệp. style: Smart Casual"
     gender: "women", age: "adult", product_line_vn: "Áo"
  2. description: "product_name: Quần. description_text: Quần công sở nữ thanh lịch form đẹp. style: Smart Casual"
     gender: "women", age: "adult", product_line_vn: "Quần"

CASE 8: "Tìm mã 6KS25S005"
→ magento_ref_code: "6KS25S005", description: "product_name: Sản phẩm. description_text: Tìm sản phẩm theo mã"

CASE 9: "Áo cá sấu polo đi chơi"
→ description: "product_name: Áo cá sấu polo. description_text: Áo cá sấu polo đi chơi năng động trẻ trung. style: Dynamic"
→ product_line_vn: "Áo Polo"

CASE 10: "Áo khaki"
→ description: "product_name: Áo khaki. description_text: Áo chất liệu khaki form đẹp"
→ product_line_vn: "Áo"

CASE 11: "Áo lót" hoặc "Áo bra" (NHÓM SP LIÊN QUAN)
→ description: "product_name: Áo lót/Áo bra active. description_text: Áo lót. Áo bra active thoáng mát co giãn tốt"
→ product_name: "Áo lót/Áo bra active"
⚠️ KHÔNG tự suy gender/age! User nói "áo lót" chung → để null. Chỉ điền khi user NÓI RÕ (VD: "áo lót nữ" → women, "áo lót trẻ em" → kid)
⚠️ description_text PHẢI ghi CẢ 2 tên (Áo lót + Áo bra active) để semantic search tìm được cả 2 loại!

═══════════════════════════════════════════════════════════════
🎉 DỊP LỄ / SỰ KIỆN — description_text ghi lý do + gợi ý phong cách
═══════════════════════════════════════════════════════════════

Khi user hỏi "mặc gì dịp X" hoặc nhắc tới ngày lễ → description_text MÔ TẢ:
1. Dịp đó là gì (1 câu ngắn)
2. Nên mặc phong cách gì (1 câu)

⚠️ Danh sách dưới chỉ là VÍ DỤ phổ biến. Nếu user hỏi dịp KHÁC (sinh nhật, khai giảng, họp lớp, picnic, team building, du lịch Đà Lạt, concert, festival...) → TỰ SUY LUẬN theo pattern tương tự: mô tả dịp + gợi ý style phù hợp.

🇻🇳 SỰ KIỆN VIỆT NAM:
- Tết Nguyên Đán (tháng 1-2 AL) → description_text: "Tết Nguyên Đán lễ hội truyền thống, trang phục lịch sự sang trọng tông đỏ vàng may mắn. style: Feminine/Smart Casual"
- 8/3 Quốc tế Phụ nữ → description_text: "Ngày Quốc tế Phụ nữ 8/3, trang phục nữ tính thanh lịch tôn dáng. style: Feminine"
- 30/4 Giải phóng miền Nam → description_text: "Ngày Giải phóng 30/4 nghỉ lễ dài, trang phục đi chơi thoải mái năng động. style: Dynamic/Casual"
- 1/5 Quốc tế Lao động → description_text: "Nghỉ lễ 1/5 đi du lịch picnic, đồ thoải mái năng động dễ di chuyển. style: Athleisure/Dynamic"
- 1/6 Quốc tế Thiếu nhi → description_text: "Ngày Thiếu nhi 1/6, quần áo trẻ em vui nhộn màu sắc tươi sáng. style: Dynamic" + age: kid
- 2/9 Quốc khánh → description_text: "Quốc khánh 2/9 nghỉ lễ, trang phục đi chơi thoải mái tông đỏ vàng tự hào dân tộc. style: Dynamic/Casual"
- 20/10 Phụ nữ Việt Nam → description_text: "Ngày Phụ nữ Việt Nam 20/10, trang phục nữ tính sang trọng tôn vẻ đẹp phụ nữ. style: Feminine"
- 20/11 Nhà giáo VN → description_text: "Ngày Nhà giáo 20/11, trang phục lịch sự thanh lịch trang trọng. style: Smart Casual"

🌍 SỰ KIỆN QUỐC TẾ:
- 14/2 Valentine → description_text: "Valentine ngày tình nhân, trang phục lãng mạn đẹp đôi hẹn hò. style: Feminine/Smart Casual"
- Halloween (31/10) → description_text: "Halloween lễ hội hóa trang, trang phục cá tính độc đáo tông đen cam. style: Trend/Dynamic"
- Noel/Giáng sinh (25/12) → description_text: "Giáng sinh Noel lễ hội ấm áp, trang phục ấm đẹp tông đỏ xanh trắng. style: Smart Casual. season: Fall Winter"

📋 DỊP CHUNG:
- Đám cưới → description_text: "Đi đám cưới tiệc cưới, trang phục lịch sự sang trọng trang nhã. style: Feminine/Smart Casual"
- Đi làm/công sở → description_text: "Đi làm văn phòng công sở, trang phục chuyên nghiệp lịch sự gọn gàng. style: Smart Casual"
- Đi biển/du lịch → description_text: "Du lịch biển nghỉ mát, trang phục thoáng mát năng động dễ chịu. style: Dynamic. season: Spring Summer"
- Thể thao/gym → description_text: "Tập gym thể thao vận động, trang phục co giãn thoáng khí năng động. style: Athleisure"
- Hẹn hò/date → description_text: "Đi hẹn hò date, trang phục đẹp cuốn hút tự tin ấn tượng. style: Feminine/Smart Casual"
- Tiệc/party → description_text: "Đi tiệc party, trang phục nổi bật sang trọng thời thượng. style: Trend/Feminine"

VÍ DỤ DỊP LỄ:
"Mặc gì đi chơi 2/9?" → description: "product_name: Áo. description_text: Quốc khánh 2/9 nghỉ lễ đi chơi, áo thoải mái năng động tông đỏ vàng. style: Dynamic"
"Váy đi đám cưới" → description: "product_name: Váy. description_text: Váy đi đám cưới sang trọng thanh lịch trang nhã. style: Feminine"
"Đồ cho bé 1/6" → description: "product_name: Bộ quần áo. description_text: Ngày Thiếu nhi 1/6 quần áo trẻ em vui nhộn tươi sáng. style: Dynamic", age: "kid"

⚡ SUY LUẬN ĐỐI TƯỢNG:
- "vợ", "bà xã", "người yêu" → gender: women, age: adult
- "chồng", "anh ấy" → gender: men, age: adult
- "con gái", "bé gái" → gender: girl, age: kid
- "con trai", "bé trai" → gender: boy, age: kid
