import pickle
from sentence_transformers import SentenceTransformer
import os

# -----------------------------
# Global Objects (Cached)
# -----------------------------
MODEL = None
EXPECTED_PHRASES = None
EXPECTED_EMBEDDINGS = None


def load_model():
    """
    Load trained SBERT model and expected phrase embeddings once
    Called at FastAPI startup
    """
    global MODEL, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS

    if MODEL is not None:
        return  # already loaded

    base_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

    model_path = os.path.join(base_dir, "models", "tortured_phrase_model.pkl")
    phrases_path = os.path.join(base_dir, "data", "expected_phrases.pkl")

    # -----------------------------
    # Load fine-tuned SBERT model
    # -----------------------------
    with open(model_path, "rb") as f:
        MODEL = pickle.load(f)

    # -----------------------------
    # Load expected phrases + embeddings
    # -----------------------------
    with open(phrases_path, "rb") as f:
        data = pickle.load(f)
        EXPECTED_PHRASES = data["phrases"]
        EXPECTED_EMBEDDINGS = data["embeddings"]

    print("✅ Tortured Phrase Model Loaded Successfully")


def get_model_components():
    """
    Safe accessor for inference
    """
    if MODEL is None:
        raise RuntimeError("Model not loaded. Startup event failed.")

    return MODEL, EXPECTED_PHRASES, EXPECTED_EMBEDDINGS
