"""
EXCLUDE 분류 시스템
실제 자재가 아닌 계산용/제외 항목들 분류
"""

import re
from typing import Dict, List, Optional

# ========== 제외 대상 타입 ==========
EXCLUDE_TYPES = {
    "WELD_GAP": {
        "description_keywords": ["WELD GAP", "WELDING GAP", "GAP", "용접갭", "웰드갭"],
        "characteristics": "용접 시 수축 고려용 계산 항목",
        "reason": "실제 자재 아님 - 용접 갭 계산용"
    },
    "CUTTING_LOSS": {
        "description_keywords": ["CUTTING LOSS", "CUT LOSS", "절단로스", "컷팅로스"],
        "characteristics": "절단 시 손실 고려용 계산 항목", 
        "reason": "실제 자재 아님 - 절단 로스 계산용"
    },
    "SPARE_ALLOWANCE": {
        "description_keywords": ["SPARE", "ALLOWANCE", "여유분", "스페어"],
        "characteristics": "예비품/여유분 계산 항목",
        "reason": "실제 자재 아님 - 여유분 계산용"
    },
    "THICKNESS_NOTE": {
        "description_keywords": ["THK", "THICK", "두께", "THICKNESS"],
        "characteristics": "두께 표기용 항목",
        "reason": "실제 자재 아님 - 두께 정보"
    },
    "CALCULATION_ITEM": {
        "description_keywords": ["CALC", "CALCULATION", "계산", "산정"],
        "characteristics": "기타 계산용 항목",
        "reason": "실제 자재 아님 - 계산 목적"
    }
}

def classify_exclude(dat_file: str, description: str, main_nom: str = "") -> Dict:
    """
    제외 대상 분류
    
    Args:
        dat_file: DAT_FILE 필드
        description: DESCRIPTION 필드
        main_nom: MAIN_NOM 필드
    
    Returns:
        제외 분류 결과
    """
    
    desc_upper = description.upper()
    
    # 제외 대상 키워드 확인
    for exclude_type, type_data in EXCLUDE_TYPES.items():
        for keyword in type_data["description_keywords"]:
            if keyword in desc_upper:
                return {
                    "category": "EXCLUDE",
                    "exclude_type": exclude_type,
                    "characteristics": type_data["characteristics"],
                    "reason": type_data["reason"],
                    "overall_confidence": 0.95,
                    "evidence": [f"EXCLUDE_KEYWORD: {keyword}"],
                    "recommendation": "BOM에서 제외 권장"
                }
    
    # 제외 대상 아님
    return {
        "category": "UNKNOWN",
        "overall_confidence": 0.0,
        "reason": "제외 대상 키워드 없음"
    }

def is_exclude_item(description: str) -> bool:
    """간단한 제외 대상 체크"""
    desc_upper = description.upper()
    
    exclude_keywords = [
        "WELD GAP", "WELDING GAP", "GAP",
        "CUTTING LOSS", "CUT LOSS", 
        "SPARE", "ALLOWANCE",
        "THK", "THICK"
    ]
    
    return any(keyword in desc_upper for keyword in exclude_keywords) 