"""
텍스트 처리 유틸리티 모듈
"""
from typing import List
import logging
from kiwipiepy import Kiwi

logger = logging.getLogger(__name__)

# Kiwi 인스턴스 (싱글톤)
_kiwi = None


def get_kiwi():
    """Kiwi 형태소 분석기 인스턴스 반환"""
    global _kiwi
    if _kiwi is None:
        _kiwi = Kiwi()
        logger.info("Kiwi 형태소 분석기 초기화 완료")
    return _kiwi


def extract_nouns(text: str) -> List[str]:
    """
    텍스트에서 명사 추출

    Args:
        text: 입력 텍스트

    Returns:
        추출된 명사 리스트
    """
    if not text or not text.strip():
        return []

    try:
        kiwi = get_kiwi()

        # 형태소 분석
        result = kiwi.analyze(text)

        # 명사 추출 (NNG: 일반명사, NNP: 고유명사, SL: 외국어, SH: 한자, SN: 숫자)
        nouns = []
        for token, pos, _, _ in result[0][0]:
            if pos in ['NNG', 'NNP', 'SL', 'SH', 'SN']:
                nouns.append(token)

        logger.debug(f"원본 텍스트: {text}")
        logger.debug(f"추출된 명사: {nouns}")

        return nouns

    except Exception as e:
        logger.error(f"명사 추출 실패: {str(e)}")
        # 오류 발생 시 원본 텍스트를 공백으로 분리하여 반환
        return text.split()


def extract_nouns_as_query(text: str) -> str:
    """
    텍스트에서 명사를 추출하여 검색 쿼리로 변환

    Args:
        text: 입력 텍스트

    Returns:
        공백으로 연결된 명사 문자열
    """
    nouns = extract_nouns(text)
    query = ' '.join(nouns)

    logger.info(f"Query 변환: '{text}' → '{query}'")

    return query if query else text
