"""
ia.py

Ce module contient la fonction reponse prenant en parametre une liste contenant des dictionnaires représentant une conversation avec une ia et la complète.

Auteur : Duranton Olivier

"""


import requests
import os


def reponse(messages):
    '''
    Fonction prenant une liste de dictionnaires correspondant à une conversation.
    Format attendu :
    messages = [
    {"role": "system", "content": "Tu es un assistant pédagogique."},
    {"role": "user", "content": "Explique-moi les bases de Python."},
    {"role": "assistant", "content": "Python est un langage de programmation facile à apprendre..."},
    {"role": "user", "content": "Comment déclarer une liste ?"}
    ]
    Retourne la même liste à laquelle on a ajouté la reponse de l'ia
    '''

    #verifications avant envoi au serveur
    assert type(messages) == list,"messages doit être une liste"
    for e in messages:
        assert type(e) == dict,"la liste doit être composée uniquement de dictionnaire"
        assert len(e.keys()) == 2,"chaque dictionnaire doit comporter exactement deux clefs"
        for cle in e.keys():
            assert cle in ("role", "content"), "seules les clefs role et content sont autorisées"
        assert e["role"] in ("system", "user", "assistant"), "Seuls les roles system, user, assistant sont autorisés"



    # Adresse du serveur et clé api
    url = "https://info-lycee.fr/api/"
    cle_api = ""




    #insertion de la clé api
    messages.insert(0,{"cle_api": cle_api})

    # requête POST
    response = requests.post(url, json={"messages": messages}, timeout=30)


    if response.status_code == 200:
        # On ajoute la réponse
        messages.append({"role":"assistant","content":str(response.json()["content"])})

        #on enlève la clé
        messages.pop(0)

        #Retourne la liste sans la clé
        return messages
    else:
        return ["Erreur :", response.json()]
