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",
        "100": "Dành cho bé 3-4Y, Cao 100cm, 14-17kg",
        "110": "Dành cho bé 4-5Y, Cao 107-113cm, 18-23kg",
        "120": "Dành cho bé 6-7Y, Cao 120cm, 24-29kg",
        "130": "Dành cho bé 8Y, Cao 130cm, 29-33kg",
        "140": "Dành cho bé 9-11Y, Cao 137-145cm, 33-39kg",
        "150": "Dành cho bé 11-12Y, Cao 150cm, 39-45kg",
        "160": "Dành cho bé 13-14Y, Cao 160cm, 45-52kg",
    },
    "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:
    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

    if gender in ["boy", "girl", "kid", "bé trai", "bé gái", "trẻ em"]: return "TRE_EM"
    if gender == "unisex": return "UNISEX"
    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"
    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:
    if not sizes: return ""
    table_key = determine_table_key(gender, product_line)
    if not table_key: return ""
    mapping = SIZE_MAPPING.get(table_key, {})
    size_lines = [f"Size {s.strip().upper()} ({mapping[s.strip().upper()]})" for s in sizes if str(s).strip().upper() in mapping]
    if not size_lines: return ""
    
    obj_str = {"NAM":"Sản phẩm Nam", "NU":"Sản phẩm Nữ", "TRE_EM":"Sản phẩm Trẻ em", "UNISEX":"Sản phẩm Unisex", "QUAN_NU":"Quần Nữ", "QUAN_NAM":"Quần Nam"}.get(table_key, "Sản phẩm")
    base_msg = f"{obj_str}. Các size ĐANG CÒN HÀNG: {'; '.join(size_lines)}."
    
    desc_lower = (description or "").lower()
    if any(x in desc_lower for x in ["dáng ôm", "slim fit", "body"]):
        base_msg += "\n\n🔥 Mẹo: Form ôm, nếu thích thoải mái nên nhích lên 1 size."
    elif any(x in desc_lower for x in ["oversize", "rộng rãi"]):
        base_msg += "\n\n🔥 Mẹo: Form rộng, nên lấy đúng size để lên dáng thụng đẹp."
        
    return base_msg
