"""GEO Analytics 공통 설정 모듈.

GA4 연동 설정, AI 소스 분류 패턴, 보험 도메인 클러스터 프리셋 등을 정의.
GA4 API 의존성은 모두 옵셔널 — 환경변수 미설정 시 CSV 수동 모드 사용.
"""

import os
from typing import Dict, List

# GA4 설정 (옵셔널 - 환경변수로 주입)
GA4_PROPERTY_ID: str = os.environ.get("GA4_PROPERTY_ID", "")
GOOGLE_APPLICATION_CREDENTIALS: str = os.environ.get(
    "GOOGLE_APPLICATION_CREDENTIALS",
    os.path.expanduser("~/.claude/credentials/ga4-agent.json"),
)

# AI 소스 분류 패턴 (레퍼러 URL 패턴 매칭용)
AI_SOURCES: Dict[str, List[str]] = {
    "ChatGPT": ["chat.openai.com", "chatgpt.com"],
    "Perplexity": ["perplexity.ai"],
    "Gemini": ["gemini.google.com"],
    "Claude": ["claude.ai"],
    "네이버 AIO": ["search.naver.com"],
}

# UTM 기반 AI 소스 패턴
UTM_AI_PATTERN: str = "ai_"

# 보험 도메인 클러스터 프리셋 (5개)
INSURANCE_CLUSTER_PRESETS: Dict[str, List[str]] = {
    "COST": ["보험료", "비용", "가격", "월납", "보험료 계산", "납입", "할인"],
    "LEARNING": ["보험 종류", "보험 뜻", "보험이란", "보험 설명", "보험 기초"],
    "PROCESS": ["가입", "절차", "심사", "청약", "서류", "가입 방법"],
    "TRUST": ["추천", "순위", "비교", "후기", "평판", "신뢰"],
    "INVESTMENT": ["연금", "투자", "저축", "수익률", "변액", "적금"],
}

# 전환 퍼널 단계 정의 (7단계)
FUNNEL_STAGES: List[str] = [
    "AI 검색 도착",
    "콘텐츠 소비",
    "인터랙션",
    "관심",
    "전환",
    "재방문",
    "추천",
]


def classify_ai_source(referrer: str, utm_source: str = "") -> str:
    """레퍼러 URL 또는 UTM 소스로 AI 소스를 분류한다.

    Args:
        referrer: HTTP 레퍼러 URL 문자열
        utm_source: UTM source 파라미터 값

    Returns:
        AI 소스 이름 (매칭 안 되면 "기타")
    """
    referrer_lower = referrer.lower()
    for source_name, patterns in AI_SOURCES.items():
        for pattern in patterns:
            if pattern in referrer_lower:
                return source_name

    if utm_source and utm_source.startswith(UTM_AI_PATTERN):
        return utm_source.replace(UTM_AI_PATTERN, "").capitalize()

    return "기타"


def is_ga4_configured() -> bool:
    """GA4 API 사용 가능 여부를 확인한다."""
    return bool(GA4_PROPERTY_ID) and os.path.exists(GOOGLE_APPLICATION_CREDENTIALS)
