"""
AI Feedback Classifier
Uses GPT-4.1-mini to classify user complaints into categories and severity.
Runs async in background — does not block user response.
"""

import json
import logging

from langchain_openai import ChatOpenAI

logger = logging.getLogger(__name__)

CLASSIFY_PROMPT = """Bạn là hệ thống phân loại phàn nàn khách hàng cho chatbot Canifa AI Stylist.

Phân loại phàn nàn sau đây của khách hàng.

## Phàn nàn:
"{comment}"

## Danh mục (chọn 1):
- thieu_du_lieu: Thiếu thông tin sản phẩm (size, màu, giá, mô tả...)
- du_lieu_sai: Thông tin sai (giá sai, tên sản phẩm sai, link sai...)
- bot_khong_hieu: Bot không hiểu ý khách hàng, trả lời lạc đề
- trai_nghiem_kem: Bot chậm, khó dùng, giao diện kém
- khac: Không thuộc các loại trên

## Mức độ nghiêm trọng:
- high: Ảnh hưởng trực tiếp đến quyết định mua hàng
- medium: Gây khó chịu nhưng không ảnh hưởng mua hàng
- low: Góp ý nhỏ, cải thiện trải nghiệm

## Trả về JSON (chỉ JSON, không giải thích):
{{"category": "...", "severity": "...", "summary": "tóm tắt ngắn gọn vấn đề"}}"""


async def classify_feedback(comment: str) -> dict:
    """
    Classify a user complaint using GPT-4.1-mini.

    Args:
        comment: The user's complaint text

    Returns:
        dict with keys: category, severity, summary
        Falls back to defaults on error.
    """
    if not comment or not comment.strip():
        return {
            "category": "khac",
            "severity": "low",
            "summary": "Không có nội dung phàn nàn",
        }

    try:
        llm = ChatOpenAI(
            model="gpt-4.1-mini",
            temperature=0,
            max_tokens=200,
        )

        prompt = CLASSIFY_PROMPT.format(comment=comment)
        response = await llm.ainvoke(prompt)
        content = response.content.strip()

        # Parse JSON from response (handle markdown code blocks)
        if "```" in content:
            content = content.split("```")[1]
            if content.startswith("json"):
                content = content[4:]
            content = content.strip()

        result = json.loads(content)

        # Validate category
        valid_categories = ["thieu_du_lieu", "du_lieu_sai", "bot_khong_hieu", "trai_nghiem_kem", "khac"]
        if result.get("category") not in valid_categories:
            result["category"] = "khac"

        # Validate severity
        valid_severities = ["low", "medium", "high"]
        if result.get("severity") not in valid_severities:
            result["severity"] = "medium"

        if "summary" not in result:
            result["summary"] = comment[:100]

        logger.info(f"🤖 AI classified: {result['category']} / {result['severity']}")
        return result

    except Exception as e:
        logger.warning(f"⚠️ AI classification failed: {e}")
        return {
            "category": "khac",
            "severity": "medium",
            "summary": comment[:100] if comment else "Classification error",
        }
