from app.config import settings

_INDEX_NAME = "passon-candidates"
_index = None


def _get_index():
    """Lazy 초기화 — 실제 호출 시에만 Pinecone 연결"""
    global _index
    if _index is None:
        from pinecone import Pinecone

        kwargs = {"api_key": settings.PINECONE_API_KEY}
        if settings.PINECONE_ENV:
            kwargs["environment"] = settings.PINECONE_ENV
        pc = Pinecone(**kwargs)
        _index = pc.Index(_INDEX_NAME)
    return _index


def upsert_candidate(candidate_id: str, embedding: list[float], metadata: dict, namespace: str):
    """
    후보자 벡터 저장
    candidate_id: "cand_<DB id>" 형식
    namespace: company_id (str)
    metadata: {"name", "email", "skills", "experience_years"} 등
    """
    _get_index().upsert(
        vectors=[{"id": candidate_id, "values": embedding, "metadata": metadata}],
        namespace=namespace,
    )


def search_candidates(jd_embedding: list[float], namespace: str, filters: dict = None, top_k: int = 10) -> list:
    """
    유사 후보자 검색
    반환: [Match(id, score, metadata), ...]  (score = 코사인 유사도 0~1)
    """
    query_params = {
        "vector": jd_embedding,
        "top_k": top_k,
        "namespace": namespace,
        "include_metadata": True,
    }
    if filters:
        query_params["filter"] = filters

    results = _get_index().query(**query_params)
    return results.matches
