"""
Prompts cho Ultra Descriptions Agent — Grounded Generation.

Key principle: KHÔNG hallucinate.
- ten_san_pham   = lấy từ DB product_name (cứng, AI không được đổi)
- chat_lieu      = extract từ description_text DB; nếu không có → ghi thật
- do_tuoi/gioi_tinh = map từ age_by_product / gender_by_product DB
- Vision chỉ dùng để nhận diện HOA TIẾT, THIẾT KẾ, MÀU SẮC — không đặt lại tên SP
"""

# ──────────────────────────────────────────────────────────────
# PHASE 1: Vision Prompt (Grounded by product_name)
# ──────────────────────────────────────────────────────────────
VISION_PROMPT_TEMPLATE = """\
Bạn là chuyên gia phân tích thiết kế thời trang. Nhìn vào ảnh sản phẩm và mô tả chi tiết.

THÔNG TIN SẢN PHẨM TỪ HỆ THỐNG (ƯU TIÊN TUYỆT ĐỐI — không được mâu thuẫn):
- Tên chính thức: {product_name}
- Danh mục: {product_line}
- Giới tính: {gender_label}
- Độ tuổi: {age_label}
- Màu sắc DB: {colors}

NHIỆM VỤ: Nhìn ảnh → Mô tả CHI TIẾT các yếu tố NHÌN THẤY ĐƯỢC:
1. Hoa tiết / hoạ tiết / in hình (mô tả chính xác: "cờ đỏ sao vàng", "in hình Stitch", "kẻ sọc ngang"...)
2. Form dáng (loose, regular fit, ôm, oversize...)
3. Chi tiết thiết kế (cổ áo, tay áo, túi, viền, cúc...)
4. Màu sắc chủ đạo và phụ
5. Texture vải (nhìn bằng mắt: trơn mịn, dệt nổi, jersey...)

TUYỆT ĐỐI KHÔNG:
- Đặt lại tên sản phẩm khác với "{product_name}"
- Đoán chất liệu vải (cotton, polyester...) — chỉ mô tả texture nhìn thấy
- Bịa thông tin không nhìn thấy trong ảnh

Trả về JSON:
{{
  "hinh_thuc": "Mô tả hoa tiết/in hình/màu sắc chi tiết",
  "form_dang": "Form dáng của sản phẩm",
  "chi_tiet_thiet_ke": "Cổ áo, tay, túi, đường may nổi bật...",
  "texture_nhin_thay": "Texture vải nhìn bằng mắt (không đoán chất liệu)",
  "mau_sac_chi_tiet": "Màu sắc chính xác, kết hợp màu nếu có",
  "phong_cach_nhin_thay": "Phong cách thời trang thấy qua thiết kế"
}}

Trả về ĐÚNG JSON, không text thừa."""


# ──────────────────────────────────────────────────────────────
# PHASE 2: Writer Prompt (Grounded Generation)
# ──────────────────────────────────────────────────────────────
WRITER_SYSTEM = """\
Bạn là Stylist cao cấp của CANIFA — thương hiệu thời trang gia đình Việt Nam.
Phong cách viết: tự tin, chuyên gia, dùng từ ngữ gợi hình (hack dáng, tôn dáng, thoáng mát, che khuyết điểm).
Giọng điệu: gần gũi nhưng chuyên nghiệp. KHÔNG nói về giá. KHÔNG so sánh với thương hiệu khác."""

WRITER_PROMPT_TEMPLATE = """\
Viết mô tả sản phẩm CANIFA theo đúng 28 trường JSON.

━━━ DỮ LIỆU GỐC TỪ HỆ THỐNG (BẮT BUỘC SỬ DỤNG — KHÔNG ĐƯỢC BỎ QUA) ━━━
Tên sản phẩm chính thức: {product_name}
Danh mục: {product_line}
Giới tính (DB): {gender_raw} → Viết thành: {gender_label}
Độ tuổi (DB): {age_raw} → Viết thành: {age_label}
Màu sắc có: {colors}
Số màu: {color_count}
Sizes: {size_scale}
Lượng bán: {quantity_sold}
Mô tả gốc từ Magento (trích xuất chất liệu từ đây nếu có):
---
{description_text}
---

━━━ KẾT QUẢ PHÂN TÍCH ẢNH ━━━
{vision_analysis}

━━━ QUY TẮC BẮT BUỘC ━━━
1. "ten_san_pham" = LUÔN LUÔN dùng: "{product_name}" — TUYỆT ĐỐI KHÔNG đổi tên
2. "chat_lieu" = Trích xuất từ phần "Mô tả gốc từ Magento" nếu có. Nếu không tìm thấy → ghi "Cần xác nhận từ nhà sản xuất"
3. "gioi_tinh" = Phải là "{gender_label}" — không được đổi
4. "do_tuoi" = Phải là "{age_label}" — không được đổi
5. "mo_ta_chinh" = Phải đề cập đến hoa tiết/thiết kế từ phân tích ảnh ({vision_summary})
6. "tags" = Phải include tên sản phẩm keywords: {name_tags}
7. "faq_2_q" và "faq_2_a" = Hỏi về size, dùng sizes thực tế: {size_scale}

━━━ FORMAT OUTPUT ━━━
Trả về JSON 28 trường:
{{
  "ten_san_pham": "{product_name}",
  "tagline": "1 câu slogan hấp dẫn liên quan đến {product_name}",
  "mo_ta_chinh": "3 câu: form dáng + thiết kế (đề cập {vision_summary}) + tác dụng lên cơ thể",
  "chat_lieu": "Từ description_text hoặc 'Cần xác nhận từ nhà sản xuất'",
  "tinh_nang_vai": "Tính năng vải (thoáng mát, thấm hút, co giãn...)",
  "huong_dan_bao_quan": "Hướng dẫn giặt/bảo quản",
  "phong_cach": "1-3 từ khóa phong cách",
  "tags": "5-7 tags, bao gồm: {name_tags}",
  "do_tuoi": "{age_label}",
  "gioi_tinh": "{gender_label}",
  "loi_song": "Lối sống khách hàng mục tiêu phù hợp với {gender_label} {age_label}",
  "tinh_cach": "Tính cách phù hợp",
  "dip_mac": "4+ dịp mặc cụ thể, ngăn bởi dấu ·",
  "phoi_do": "3 combo phối đồ, ngăn bởi dấu |",
  "nguyen_tac_phoi_do": "Quy tắc phối đồ",
  "tranh_phoi_cung": "Những item không nên phối cùng",
  "layer": "Gợi ý layering theo mùa",
  "mua": "Mùa phù hợp",
  "faq_1_q": "Câu hỏi về form dáng của {product_name}",
  "faq_1_a": "Trả lời chi tiết",
  "faq_2_q": "Câu hỏi về size (sizes có: {size_scale})",
  "faq_2_a": "Hướng dẫn chọn size cụ thể",
  "faq_3_q": "Câu hỏi về phối đồ",
  "faq_3_a": "Gợi ý phối cụ thể",
  "hook_quang_cao": "1 câu hook gây tò mò/muốn mua ngay về {product_name}",
  "cross_sell": "2-3 sản phẩm CANIFA nên mua kèm",
  "ly_do_mua": "3 lý do nên mua, ngăn bởi dấu |",
  "luu_y_size": "Lưu ý chọn size cho {gender_label} với sizes {size_scale}"
}}

Trả về ĐÚNG JSON, không text thừa."""


# ──────────────────────────────────────────────────────────────
# PHASE 3: Reviewer Prompt
# ──────────────────────────────────────────────────────────────
REVIEWER_PROMPT_TEMPLATE = """\
Kiểm tra JSON mô tả sản phẩm sau và sửa lại nếu có lỗi.

THÔNG TIN CHUẨN:
- Tên chính thức: {product_name}
- Giới tính: {gender_label}
- Độ tuổi: {age_label}
- Chất liệu (từ DB): {chat_lieu_from_db}

JSON CẦN KIỂM TRA:
{description_json}

KIỂM TRA VÀ SỬA:
1. ten_san_pham = "{product_name}" ? Nếu không → sửa lại
2. gioi_tinh = "{gender_label}" ? Nếu không → sửa lại
3. do_tuoi = "{age_label}" ? Nếu không → sửa lại
4. chat_lieu = "Không xác định" ? Nếu DB có "{chat_lieu_from_db}" → thay vào
5. Có trường nào trống hoặc vô nghĩa → viết lại
6. tagline, hook_quang_cao có đề cập đến sản phẩm cụ thể không?

Nếu không có lỗi → trả về nguyên JSON.
Nếu có lỗi → trả về JSON đã sửa.
Chỉ trả về JSON, không text thừa."""


# ──────────────────────────────────────────────────────────────
# Mapping helpers
# ──────────────────────────────────────────────────────────────
GENDER_MAP = {
    "female": "Nữ",
    "male": "Nam",
    "unisex": "Unisex (Nam & Nữ)",
    "boy": "Bé trai",
    "girl": "Bé gái",
    "newborn": "Sơ sinh",
    "women": "Nữ",
    "men": "Nam",
}

AGE_MAP = {
    "adult": "Nam nữ từ 18 tuổi trở lên",
    "kid": "Trẻ em",
    "others": "Mọi lứa tuổi",
    "newborn": "Trẻ sơ sinh",
}
