from pinecone import Pinecone
from app.core.config import settings


def _resolve_index(pc: Pinecone, index_name: str):
    name = index_name.strip()
    if name.startswith("http") or "pinecone.io" in name:
        return pc.Index(host=name)
    return pc.Index(name)


class PineconeService:
    def __init__(self):
        # We will only initialize if API key is provided
        if settings.PINECONE_API_KEY:
            self.pc = Pinecone(api_key=settings.PINECONE_API_KEY)
            self.index_name = settings.PINECONE_INDEX_NAME
        else:
            self.pc = None
            self.index_name = None

    def get_index(self):
        if not self.pc:
            raise ValueError("Pinecone API key is not configured.")
        return self.pc.Index(self.index_name)


class HotelPineconeService:
    """Message-center hotel docs: PINECONE_API_KEY_MESSAGE_CENTER + PINECONE_INDEX_NAME_MESSAGE_CENTER."""

    def __init__(self):
        if settings.PINECONE_API_KEY_MESSAGE_CENTER:
            self.pc = Pinecone(api_key=settings.PINECONE_API_KEY_MESSAGE_CENTER)
            self.index_name = settings.PINECONE_INDEX_NAME_MESSAGE_CENTER
        else:
            self.pc = None
            self.index_name = None

    def get_index(self):
        if not self.pc:
            raise ValueError("Message center Pinecone API key is not configured.")
        if not self.index_name:
            raise ValueError("Message center Pinecone index name is not configured.")
        return _resolve_index(self.pc, self.index_name)


class HotelPrivatePineconeService:
    """Private hotel docs: PINECONE_API_KEY + PINECONE_INDEX_PRIVATE."""

    def __init__(self):
        if settings.PINECONE_API_KEY and settings.PINECONE_INDEX_PRIVATE:
            self.pc = Pinecone(api_key=settings.PINECONE_API_KEY)
            self.index_name = settings.PINECONE_INDEX_PRIVATE
        else:
            self.pc = None
            self.index_name = None

    def get_index(self):
        if not self.pc:
            raise ValueError("Private Pinecone API key is not configured.")
        if not self.index_name:
            raise ValueError("Private Pinecone index name is not configured.")
        return _resolve_index(self.pc, self.index_name)


pinecone_service = PineconeService()
hotel_pinecone_service = HotelPineconeService()
hotel_private_pinecone_service = HotelPrivatePineconeService()
