from openai import OpenAI
import pandas as pd
import numpy as np
import hdbscan
from tqdm import tqdm
import sys

# 🗝️ Init client
client = OpenAI()

# 📥 Încarcă CSV cu coloana 'tags'
df = pd.read_csv(sys.argv[1])

# 🔄 Transformă lista de taguri într-o listă unică
all_tags = []
for tags in df["tags"].dropna():
    for t in str(tags).split(","):
        all_tags.append(t.strip().lower())
unique_tags = list(set(all_tags))

print(f"Avem {len(unique_tags)} taguri unice")

# 🧠 Generează embeddings pentru fiecare tag
embeddings = []
for tag in tqdm(unique_tags):
    response = client.embeddings.create(
        model="text-embedding-3-large",  # sau "text-embedding-3-large" pt. mai multă precizie
        input=tag
    )
    embeddings.append(response.data[0].embedding)

embeddings = np.array(embeddings)

# 🤖 Clustering HDBSCAN
clusterer = hdbscan.HDBSCAN(
    min_cluster_size=3,    # nr minim de puncte pt. cluster
    min_samples=2,         # sensibilitatea la noise
    metric="euclidean"     # poți încerca și "manhattan"
)
labels = clusterer.fit_predict(embeddings)

# 🗂 Construiește clustere
clusters = {}
for tag, label in zip(unique_tags, labels):
    clusters.setdefault(label, []).append(tag)

# 📦 Salvează în fișier
with open("clusters_hdbscan.txt", "w") as f:
    for label, tags in clusters.items():
        f.write(f"Cluster {label}:\n")
        for t in tags:
            f.write(f"  - {t}\n")
        f.write("\n")

print("✅ Clusterele HDBSCAN au fost salvate în clusters_hdbscan.txt")
