from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
import json

class VectorStore:
    def __init__(self):
        self.embeddings = HuggingFaceEmbeddings(
            model_name="sentence-transformers/all-MiniLM-L6-v2"
        )

    def create_store(self, documentos_raw: list):
        documents = []

        print(f"Total de documentos crudos: {len(documentos_raw)}")

        for i, doc in enumerate(documentos_raw):
            if not isinstance(doc, dict):
                print(f"[{i}] Documento no es un dict válido: {type(doc)} - {doc}")
                continue

            if not isinstance(doc, dict):
                print(f"[{i}] Documento no es un dict válido: {doc}")
                continue

            contenido = doc.get("contenido")
            texto = None

            if isinstance(contenido, dict):
                texto = contenido.get("tweet")
            elif isinstance(contenido, str):
                texto = contenido
            else:
                print(f"[{i}] Contenido no válido: {contenido}")
                continue

            if texto and isinstance(texto, str) and texto.strip():
                documents.append(Document(page_content=texto.strip()))
            else:
                print(f"[{i}] Texto no válido o vacío.")

        print(f"Documentos válidos para FAISS: {len(documents)}")

        if not documents:
            raise ValueError("No se encontraron documentos con contenido válido para crear el vector store.")

        return FAISS.from_documents(documents, self.embeddings)
