#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Script d'exemple pour montrer l'utilisation de la classe MistralAPI
"""

import os
import sys
import argparse
from pathlib import Path

# Ajouter le répertoire parent au sys.path pour importer les modules
sys.path.append(str(Path(__file__).parent.parent))

from core.factory import LLMFactory

def afficher_modeles_disponibles():
    """Affiche les modèles disponibles via l'API Mistral"""
    # Création d'une instance MistralAPI via la factory
    llm = LLMFactory().create("mistralapi")
    
    try:
        modeles = llm.obtenir_liste_modeles()
        print("\n=== Modèles disponibles sur l'API Mistral ===")
        
        if not modeles:
            print("Aucun modèle trouvé ou erreur de récupération.")
            return
        
        for i, modele in enumerate(modeles, 1):
            print(f"{i}. {modele}")
    
    except Exception as e:
        print(f"Erreur lors de la récupération des modèles: {e}")

def generer_reponse(prompt, modele=None, temperature=None, max_tokens=None):
    """Génère une réponse avec MistralAPI"""
    # Création d'une instance MistralAPI via la factory
    llm = LLMFactory().create("mistralapi")
    
    # Configuration des paramètres si spécifiés
    if modele:
        llm.modele = modele
    
    if temperature is not None:
        llm.parametres_generation["temperature"] = temperature
    
    if max_tokens is not None:
        llm.parametres_generation["max_tokens"] = max_tokens
    
    # Affichage des paramètres utilisés
    print(f"\n=== Génération avec MistralAPI ===")
    print(f"Modèle: {llm.modele}")
    print(f"Température: {llm.parametres_generation['temperature']}")
    print(f"Max tokens: {llm.parametres_generation.get('max_tokens', 'Non spécifié')}")
    print(f"\nPrompt: {prompt}\n")
    
    try:
        # Génération de la réponse
        reponse = llm.generate(prompt)
        
        # Affichage de la réponse
        print("\n=== Réponse ===")
        print(reponse)
        
        return reponse
    
    except Exception as e:
        print(f"Erreur lors de la génération: {e}")
        return None

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Test de l'API Mistral")
    parser.add_argument("--list-models", action="store_true", help="Afficher les modèles disponibles")
    parser.add_argument("--prompt", help="Prompt pour générer une réponse")
    parser.add_argument("--model", help="Nom du modèle à utiliser (ex: mistral-large-latest)")
    parser.add_argument("--temperature", type=float, help="Température pour la génération (0.0-1.0)")
    parser.add_argument("--max-tokens", type=int, help="Nombre maximum de tokens à générer")
    
    args = parser.parse_args()
    
    # Vérification de la clé API dans l'environnement
    if not os.environ.get("MISTRAL_API_KEY"):
        print("Erreur: Variable d'environnement MISTRAL_API_KEY non définie.")
        print("Veuillez définir cette variable avec votre clé API Mistral.")
        print("Exemple: export MISTRAL_API_KEY=votre_clé_api")
        sys.exit(1)
    
    # Exécution en fonction des arguments
    if args.list_models:
        afficher_modeles_disponibles()
    
    elif args.prompt:
        generer_reponse(
            args.prompt,
            modele=args.model,
            temperature=args.temperature,
            max_tokens=args.max_tokens
        )
    
    else:
        parser.print_help() 