from sentence_transformers import SentenceTransformer
import pickle
import os
from app.core.logger import logger

# -----------------------------
# Global objects (cached)
# -----------------------------
EMBEDDER = None
EXPECTED_PHRASES = None
EXPECTED_EMBEDDINGS = None

def load_embedder(model_name="all-MiniLM-L6-v2", phrases_file=None):
    """
    Load SBERT embedder + expected phrases embeddings
    """
    global EMBEDDER, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS

    if EMBEDDER is not None:
        return EMBEDDER, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS

    # Load SBERT model
    EMBEDDER = SentenceTransformer(model_name)
    logger.info(f"✅ SBERT Embedder '{model_name}' loaded.")

    # Load expected phrases and embeddings
    if phrases_file is None:
        base_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
        phrases_file = os.path.join(base_dir, "data", "expected_phrases.pkl")

    with open(phrases_file, "rb") as f:
        data = pickle.load(f)
        EXPECTED_PHRASES = data["phrases"]
        EXPECTED_EMBEDDINGS = data["embeddings"]
    logger.info("✅ Expected phrases and embeddings loaded.")

    return EMBEDDER, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS

def get_embedder_components():
    """
    Safe accessor for inference
    """
    if EMBEDDER is None:
        raise RuntimeError("Embedder not loaded. Call load_embedder() first.")
    return EMBEDDER, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS
