import logging

logger = logging.getLogger(__name__)

SIZE_MAPPING = {
    "NU": {
        "XS": "Cao 1m47-1m53, Nặng 38-43kg",
        "S":  "Cao 1m50-1m55, Nặng 41-46kg",
        "M":  "Cao 1m55-1m63, Nặng 47-52kg",
        "L":  "Cao 1m60-1m65, Nặng 53-58kg",
        "XL": "Cao 1m62-1m66, Nặng 59-64kg",
    },
    "NAM": {
        "S":   "Cao 1m62-1m68, Nặng 57-62kg",
        "M":   "Cao 1m69-1m73, Nặng 63-67kg",
        "L":   "Cao 1m71-1m75, Nặng 68-72kg",
        "XL":  "Cao 1m73-1m77, Nặng 73-77kg",
        "XXL": "Cao 1m75-1m79, Nặng 78-82kg",
    },
    "QUAN_NU": {
        "26": "Vòng eo 65cm, Vòng mông 79-87cm",
        "27": "Vòng eo 67.5cm, Vòng mông 81-89cm",
        "28": "Vòng eo 70cm, Vòng mông 84-92cm",
        "29": "Vòng eo 72.5cm, Vòng mông 86-94cm",
        "30": "Vòng eo 75cm, Vòng mông 89-97cm",
    },
    "QUAN_NAM": {
        "29": "Vòng eo 79.5cm, Vòng mông 96.5cm",
        "30": "Vòng eo 82cm, Vòng mông 99cm",
        "31": "Vòng eo 84.5cm, Vòng mông 101.5cm",
        "32": "Vòng eo 87cm, Vòng mông 104cm",
        "33": "Vòng eo 89cm, Vòng mông 106.5cm",
    },
    "TRE_EM": {
        "90":  "Dành cho bé 2Y, Cao 90cm, 10-13kg",
        "92":  "Dành cho bé 2Y, Cao 88-94cm, 10-13kg",
        "98":  "Dành cho bé 2-3Y, Cao 95-101cm, 13-15kg",
        "100": "Dành cho bé 3-4Y, Cao 100cm, 14-17kg",
        "104": "Dành cho bé 3-4Y, Cao 101-107cm, 15-18kg",
        "110": "Dành cho bé 4-5Y, Cao 107-113cm, 18-23kg",
        "116": "Dành cho bé 6Y, Cao 113-119cm, 22-25kg",
        "120": "Dành cho bé 6-7Y, Cao 120cm, 24-29kg",
        "122": "Dành cho bé 7Y, Cao 119-125cm, 25-28kg",
        "128": "Dành cho bé 8Y, Cao 125-131cm, 28-32kg",
        "130": "Dành cho bé 8Y, Cao 130cm, 29-33kg",
        "134": "Dành cho bé 9Y, Cao 131-137cm, 32-36kg",
        "140": "Dành cho bé 9-11Y, Cao 137-145cm, 33-39kg",
        "150": "Dành cho bé 11-12Y, Cao 150cm, 39-45kg",
        "152": "Dành cho bé 11-12Y, Cao 145-157cm, 39-46kg",
        "160": "Dành cho bé 13-14Y, Cao 160cm, 45-52kg",
        "164": "Dành cho bé 13-14Y, Cao 157-169cm, 46-55kg",
    },
    "UNISEX": {
        "XXS": "Cao 1m55-1m63, Nặng 47-52kg",
        "XS":  "Cao 1m60-1m65, Nặng 53-58kg",
        "S":   "Cao 1m62-1m68, Nặng 57-62kg",
        "M":   "Cao 1m69-1m73, Nặng 63-67kg",
        "L":   "Cao 1m71-1m75, Nặng 68-72kg",
        "XL":  "Cao 1m73-1m77, Nặng 73-77kg",
        "XXL": "Cao 1m75-1m79, Nặng 79-82kg",
    }
}

def determine_table_key(gender: str, product_line: str) -> str:
    """Xác định bảng size phù hợp dựa trên giới tính và dòng sản phẩm."""
    gender = (gender or "").lower().strip()
    product_line = (product_line or "").lower().strip()

    is_jeans_or_khaki = any(x in product_line for x in ["jean", "khaki", "kaki", "quần âu", "quần tây"])
    is_bottom = "quần" in product_line

    # 1. Trẻ em
    if gender in ["boy", "girl", "kid", "bé trai", "bé gái", "be trai", "be gai", "trẻ em"]:
        return "TRE_EM"

    # 2. Unisex
    if gender == "unisex":
        return "UNISEX"

    # 3. Quần size số (Jeans/Khaki/Âu) - Nếu không phải quần size chữ
    if is_bottom and is_jeans_or_khaki:
        if gender in ["women", "nu", "nữ", "female"]:
            return "QUAN_NU"
        elif gender in ["men", "nam", "male"]:
            return "QUAN_NAM"

    # 4. Áo / Quần chun (Dùng bảng chuẩn Nam / Nữ)
    if gender in ["women", "nu", "nữ", "female"]:
        return "NU"
    elif gender in ["men", "nam", "male"]:
        return "NAM"

    return ""

def build_size_message(gender: str, product_line: str, sizes: list[str], description: str = "") -> str:
    """
    Sinh ra message hướng dẫn chọn size chỉ chứa các size thực tế đang có (available_sizes).
    Nếu mô tả sản phẩm có từ khóa form dáng (ôm, rộng) thì đính kèm mẹo.
    """
    if not sizes:
        return ""

    table_key = determine_table_key(gender, product_line)
    if not table_key:
        return ""  # Không xác định được bảng size

    mapping = SIZE_MAPPING.get(table_key, {})
    if not mapping:
        return ""

    # Tạo chuỗi thông tin cho các size khả dụng
    size_lines = []
    # Sort sizes logically if possible, but keep original order for now to avoid complexity with letters vs numbers
    for s in sizes:
        s_upper = str(s).strip().upper()
        if s_upper in mapping:
            size_lines.append(f"Size {s_upper} ({mapping[s_upper]})")

    if not size_lines:
        return "" # Các size đưa vào không có trong bảng (ví dụ freesize)

    # Sinh phần mô tả đối tượng
    obj_str = "Sản phẩm Nữ"
    if table_key == "NAM": obj_str = "Sản phẩm Nam"
    elif table_key == "TRE_EM": obj_str = "Sản phẩm Trẻ em"
    elif table_key == "UNISEX": obj_str = "Sản phẩm Unisex (Phi giới tính)"
    elif table_key == "QUAN_NU": obj_str = "Quần Nữ (Size số)"
    elif table_key == "QUAN_NAM": obj_str = "Quần Nam (Size số)"

    base_msg = f"{obj_str}. Các size ĐANG CÒN HÀNG: " + "; ".join(size_lines) + "."

    # Tìm mẹo tư vấn (fit style hints) - Viết theo dạng mớm lời trực tiếp (Directive) cho AI
    desc_lower = (description or "").lower()
    tips = []

    if any(x in desc_lower for x in ["dáng ôm", "slim fit", "slim-fit", "body", "ôm sát"]):
        tips.append("🔥 Chỉ dẫn cho AI: Sản phẩm này là form ôm (slim-fit). Khi tư vấn size, hãy chèn thêm câu khuyên khách cực khéo: 'Dáng này thiết kế ôm body tôn dáng, nếu anh/chị thích mặc cử động thoải mái hoặc hay mặc lót bên trong thì mình nên nhích lên 1 size cho dễ chịu nhé ạ!'")
    elif any(x in desc_lower for x in ["oversize", "thùng thình", "rộng rãi", "boxy"]):
        tips.append("🔥 Chỉ dẫn cho AI: Sản phẩm này là form Oversize (rộng rãi). Hãy dặn dò khách thật tinh tế: 'Mẫu này hãng đã làm form rộng rãi sẵn rồi, anh/chị cứ dựa theo chiều cao cân nặng lấy ĐÚNG SIZE là lên dáng thụng cực chất, không cần phải cố tăng size đâu ạ. Còn nếu thích mặc gọn gàng thì mới lùi 1 size nhé!'")
    elif any(x in desc_lower for x in ["regular", "vừa vặn"]):
        tips.append("🔥 Chỉ dẫn cho AI: Sản phẩm có form Regular chuẩn. Hãy chốt size dứt khoát: 'Mẫu này form dáng vừa vặn cực chuẩn, anh/chị cứ chiếu theo đúng chiều cao cân nặng lấy chuẩn size là mặc vừa in, không cần đắn đo ạ!'")

    if tips:
        base_msg += "\n\n" + "\n".join(tips)

    return base_msg



