"""AI 자동 티켓 분류 — SR 타이틀/설명에서 우선순위, 카테고리, 담당팀 제안."""
from __future__ import annotations

import json
import logging

logger = logging.getLogger(__name__)

CLASSIFY_PROMPT = """다음 IT 서비스 요청을 분석하여 JSON으로 분류하세요.

제목: {title}
설명: {description}

다음 필드를 포함하는 JSON만 출력하세요:
{{
  "priority": "CRITICAL|HIGH|MEDIUM|LOW",
  "category": "HARDWARE|SOFTWARE|NETWORK|DATABASE|SECURITY|DEPLOYMENT|OTHER",
  "team": "INFRA|DEV|DBA|SECURITY|HELPDESK",
  "urgency_reason": "우선순위 판단 이유",
  "keywords": ["핵심키워드1", "핵심키워드2", "핵심키워드3"],
  "confidence": 0.85
}}"""


async def classify_ticket(title: str, description: str) -> dict:
    """SR 제목과 설명으로 AI 분류 제안 생성."""
    prompt = CLASSIFY_PROMPT.format(
        title=title,
        description=(description or "")[:500],
    )

    try:
        from core.llm_client import get_llm_client
        client = get_llm_client()
        resp = await client.chat(prompt)
        raw = resp.content.strip()
        if "```" in raw:
            raw = raw.split("```")[1]
            if raw.startswith("json"):
                raw = raw[4:]
        result = json.loads(raw)
        # 필수 필드 보정
        result.setdefault("priority", "MEDIUM")
        result.setdefault("category", "OTHER")
        result.setdefault("team", "HELPDESK")
        result.setdefault("urgency_reason", "")
        result.setdefault("keywords", [])
        result.setdefault("confidence", 0.5)
        return result
    except Exception as e:
        logger.warning("AI 티켓 분류 실패 (Fail-Safe): %s", e)
        # 키워드 기반 규칙 폴백
        return _rule_based_classify(title, description)


def _rule_based_classify(title: str, description: str) -> dict:
    """LLM 실패 시 키워드 규칙 기반 분류."""
    text = f"{title} {description}".lower()
    priority = "MEDIUM"
    category = "OTHER"
    team = "HELPDESK"

    if any(k in text for k in ["긴급", "critical", "서비스 중단", "장애", "접속 불가"]):
        priority = "CRITICAL"
    elif any(k in text for k in ["오류", "error", "실패", "배포", "deploy"]):
        priority = "HIGH"
    elif any(k in text for k in ["설치", "변경", "업그레이드"]):
        priority = "MEDIUM"

    if any(k in text for k in ["서버", "cpu", "메모리", "디스크", "하드웨어"]):
        category, team = "HARDWARE", "INFRA"
    elif any(k in text for k in ["db", "데이터베이스", "oracle", "mysql", "postgresql"]):
        category, team = "DATABASE", "DBA"
    elif any(k in text for k in ["네트워크", "방화벽", "포트", "ip", "dns"]):
        category, team = "NETWORK", "INFRA"
    elif any(k in text for k in ["보안", "취약점", "cve", "패치"]):
        category, team = "SECURITY", "SECURITY"
    elif any(k in text for k in ["배포", "deploy", "jenkins", "빌드"]):
        category, team = "DEPLOYMENT", "DEV"
    elif any(k in text for k in ["소프트웨어", "애플리케이션", "app", "버그"]):
        category, team = "SOFTWARE", "DEV"

    return {
        "priority": priority,
        "category": category,
        "team": team,
        "urgency_reason": "키워드 규칙 기반 분류 (LLM 미사용)",
        "keywords": [],
        "confidence": 0.3,
    }
