import os
import pandas as pd
from sklearn.neighbors import NearestNeighbors
import joblib


# NOUVEAU CODE
# Script utilitaire pour (re)générer le modèle KNN à partir du fichier d'interactions.
# Ce script peut être lancé manuellement si nécessaire, mais la reconstruction du modèle
# est également effectuée automatiquement dans l'endpoint /update de l'API.

BASE_DIR = os.path.dirname(__file__)
INTERACTIONS_PATH = os.path.join(BASE_DIR, 'interactions.csv')
MODEL_PATH = os.path.join(BASE_DIR, 'model.pkl')


def build_model_from_interactions():
    """
    Reconstruit le modèle KNN à partir du fichier interactions.csv.
    Colonnes attendues : user_id, product_id, rating, time_spent_seconds, timestamp
    """
    if not os.path.exists(INTERACTIONS_PATH):
        raise FileNotFoundError(f"Fichier d'interactions introuvable: {INTERACTIONS_PATH}")

    df = pd.read_csv(INTERACTIONS_PATH)
    if df.empty:
        raise ValueError("Le fichier d'interactions est vide, impossible de construire le modèle.")

    # Pivot user x product avec rating moyen
    pivot = df.pivot_table(
        index='user_id',
        columns='product_id',
        values='rating',
        aggfunc='mean'
    ).fillna(0)

    if pivot.empty:
        raise ValueError("Pivot vide après agrégation, vérifiez le contenu d'interactions.csv.")

    model = NearestNeighbors(metric='cosine', algorithm='brute')
    model.fit(pivot)

    joblib.dump((model, pivot), MODEL_PATH)
    print(f"Modèle sauvegardé dans {MODEL_PATH} (pivot shape: {pivot.shape})")


if __name__ == "__main__":
    build_model_from_interactions()