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

# CONFIGURAZIONE
INPUT_FILE = "metadata_cleaned_final.json"
INDEX_NAME = "faiss_index_fashion"

def build_index():
    print("--- CREAZIONE INDICE DI RICERCA (FAISS) ---")
    
    if not os.path.exists(INPUT_FILE):
        print("❌ Fai prima lo Step 1!")
        return

    print("-> Caricamento prodotti puliti...")
    with open(INPUT_FILE, 'r', encoding='utf-8') as f:
        products = json.load(f)

    print(f"-> Preparazione documenti ({len(products)} items)...")
    docs = []
    for p in products:
        # Il contenuto che verrà cercato semanticamente
        page_content = f"{p['title']} {p['brand']} {' '.join(str(c) for c in p['categories'])}"
        
        # I metadati che il bot userà per rispondere
        meta = {
            "asin": p['asin'],
            "title": p['title'],
            "price": str(p['price']),
            "brand": p['brand'],
            "image_url": p['image_url']
        }
        docs.append(Document(page_content=page_content, metadata=meta))

    print("-> Calcolo Embeddings e Indicizzazione (può richiedere qualche minuto)...")
    embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
    
    # Creazione vettori in batch (più veloce)
    vectorstore = FAISS.from_documents(docs, embeddings)
    
    vectorstore.save_local(INDEX_NAME)
    print(f"✅ INDICE SALVATO IN CARTELLA '{INDEX_NAME}'!")

if __name__ == "__main__":
    build_index()