import json
import os
import copy
import time
from urllib.parse import quote
from urllib.parse import unquote

import KCALLMConst
import KCALLMCore
import KCALLMMainSpeechToData
import KCALLMActivityUtilities
import KCALLMUtilities


def ErrorMsg(mess):
    err = "ERROR: " + mess
    rc = {
        'statusCode': 200,
        'body': err
    }
    return rc


def runEvent(event):

    #------------------------------------------
    # Read URL parameters
    #------------------------------------------
    queryStringParameters = {}
    try:
        queryStringParameters = event["queryStringParameters"]
    except:
        return ErrorMsg("Wrong URL parameters")

    # Read query
    speech = ""
    try:
        speech = queryStringParameters['speech']
        speech = unquote(speech)
    except:
        pass

    # Read image
    image64 = ''
    try:
        image64 = queryStringParameters['image64']
    except:
        pass

    # Read image
    imagePath = ''
    try:
        imagePath = queryStringParameters['imagePath']
    except:
        pass

    # Test
    test = 0
    try:
        test = queryStringParameters['test']
    except:
        pass

    # Read comment
    comment = ""
    try:
        comment = queryStringParameters['comment']
    except:
        pass

    # Read appid
    appId = ""
    try:
        appId = queryStringParameters['appid']
    except:
        pass

    # Read device
    device = ""
    try:
        device = queryStringParameters['device']
    except:
        pass

    # Read version
    version = ""
    try:
        version = queryStringParameters['version']
    except:
        pass

    # Age
    age = 0
    try:
        age = int(queryStringParameters['age'])
    except:
        pass

    # Read context
    origin = ""
    try:
        origin = queryStringParameters['origin']
    except:
        pass
    
    # Gender
    gender = "u"
    try:
        gender = queryStringParameters['gender']
    except:
        pass

    # Gender
    longitude = 180.0
    try:
        longitude = float(queryStringParameters['longitude'])
    except:
        pass

    # Gender
    latitude = 90.0
    try:
        latitude = float(queryStringParameters['latitude'])
    except:
        pass
    
    #------------------------------------------
    # Run speech or image to data
    #------------------------------------------
    if speech != "" or image64 != "":

        resp = KCALLMMainSpeechToData.execute(speech, imagePath, image64, comment, appId, device, version, age, gender, longitude, latitude, test)

        if origin == '':
            return {
                'statusCode': 200,
                'body': resp
            }
        else:
            return resp
    
    else:
        return ErrorMsg("Speech content is null")


def addNewSemanticTest(queries, queryFilter, comment, context, prompt):

    if (queryFilter != "" and prompt.find(queryFilter) >= 0) or queryFilter == "":
        newEntry = {}
        newEntry['comment'] = comment
        newEntry['context'] =  copy.deepcopy(context)
        newEntry['prompt'] = prompt
        newEntry['imagePath'] = ''
        newEntry['image64'] = ''
        queries.append(newEntry)
    
    return


def addNewImageTest(queries, queryFilter, comment, context, imagePath):

    if imagePath.find(queryFilter) >= 0:
        newEntry = {}
        newEntry['comment'] = comment
        newEntry['context'] = context
        newEntry['prompt'] = ''
        newEntry['imagePath'] = imagePath
        print(imagePath)
        newEntry['image64'] = KCALLMUtilities.encodeImage(imagePath)
        queries.append(newEntry)
    
    return



def getAllQueries(queries, queryFilter):

    #-------------------------------
    comment = "Simple case for food with image"
    context = KCALLMConst.INTENT_IMAGE_TO_FOOD
    #-------------------------------
    imageNames = []
    imaFormats = ["png", "jpg", "jpeg"]
    rootPath = os.path.join(os.getcwd(), "data", "samples",  "images")
    for ifile in os.listdir(rootPath):
        for imaf in imaFormats:
            if ("." + imaf) in ifile:
                imageNames.append(ifile)

    imagePaths = []
    for imageName in imageNames:
        path = os.path.join(rootPath, imageName)
        if not os.path.exists(path):
            print("############################################################")
            print("##          Path '" + path + "' does not exist            ##")
            print("############################################################")
            exit(0)
        addNewImageTest(queries, queryFilter, comment, context, path)

    #-------------------------------
    comment = "Simple case for food"
    context = [KCALLMConst.INTENT_TEXT_TO_FOOD]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "Une orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "j'ai bu un verre de coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux tasses de café.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu un demi verre de lait entier.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé deux tranches de jambon blanc.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé une tranche de pain de mie.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand verre de lait.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé une orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé deux portions de Vache qui Rit.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé deux Vache qui Rit.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé une banane.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux verres de whisky.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai mangé un quignon de pain.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé une banane.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé trois noix ce matin.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce soir je vais boire un verre de coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai bu un grand verre de lait entier.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une tasse de café.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une tranche de foie gras.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu une tasse de café.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi, j'ai mangé un tartare de boeuf.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi, j'ai mangé une part de tarte à la pomme.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Je vais boire une demie canette de coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé un quart de coupe de glace.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Je voudrais boire une demi canette de coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Je voudrais boire 20 cl de coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux verres de vin rouge.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé un croissant.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un quignon de pain.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux tranches de pain avec une cuillère de confiture.")
    addNewSemanticTest(queries, queryFilter, comment, context, "250 g de carottes râpées.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un verre et demi de d'eau.")
    addNewSemanticTest(queries, queryFilter, comment, context, "200 g de carotte cuites.")
    addNewSemanticTest(queries, queryFilter, comment, context, "A midi, j'ai mangé 30 grammes de carotte.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une grande souscoupe de soupe.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux grands verres de bière.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Trois quarts d'un verre de bière.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux verres de bière.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux cafés.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un morceau de beurre allégé.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Jus d'orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un verre de vin rouge.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une chope de bière.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un Danone nature.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un yaourt nature Danone.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un demi melon.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un verre de vin rouge.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux steaks hachés.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une demi tranche de pain.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un café avec un sucre.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux cafés avec un sucre.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé à midi un sandwich au jambon.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Six huîtres.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux pommes.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé un Danone nature au lever du soleil.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un petit verre de jus d'orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand bol de lait entier.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand verre d'eau avec des bulles.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé un cassoulet aux morilles.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai dégusté un smoothie aux kiwis.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Deux parts de tarte aux mytilles.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand verre de jus d'orange avec du gingembre.")



    #-------------------------------
    comment = "Simple case for food with brand"
    context = [KCALLMConst.INTENT_TEXT_TO_FOOD]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "Un yaourt nature Danone.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai mangé un yaourt Activia.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un Danone nature.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai mangé un Petits Filous.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Une cannette de Coca-Cola.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux verres de Coca.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce soir, j'ai mangé une barquette de couscous de chez Picard.")
    addNewSemanticTest(queries, queryFilter, comment, context, "j'ai mangé un yaourt à la fraise Danone.")

    #-------------------------------
    comment = "Complex case for food"
    context = [KCALLMConst.INTENT_TEXT_TO_FOOD]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux tasse de thé ce matin et j'ai mangé une banane.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu une bière et mangé une orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce soir je vais manger une tomate et une tranche de jambon.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce soir je mangerai une tomate et trois tranches de jambon.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé une tomate accompagnée d'une tranche de jambon.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai bu un grand verre de lait et mangé une banane.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Finalement j'ai mangé du saumon avec une pomme de terre. J'ai bu un demi-verre de vin blanc. Et la tarte aux pommes en dessert était excellente.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Je vais donc manger un pavé de saumon avec une portion de frites.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'avais super faim et je me suis fait 2 oeufs au plat avec des toasts grillés, du jus d'orange et un capuccino.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ma caesar salad de ce soir au resto était copieuse. Ils m'a proposé une IPA mais j'aurais préféré un Perrier. Enfin, j'ai mangé 2 cheesecakes.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ma caesar salad de ce soir au resto était copieuse. Ils m'a proposé une IPA mais j'ai préféré un Perrier. Enfin, j'ai mangé 2 cheesecakes.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Hier soir, j'ai mangé un couscous de chez Picard, non pas avec un verre de vin mais deux verres de Coca-cola.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Comme il fait chaud, ce resto espagnol m'a servi un gaspacho, puis du poulpe grillé avec des poivrons grillés. Pour le dessert j'ai juste pris une salade de fruits. Pour arroser tout ça j'ai pris un verre de vino verde.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand bol de lait chaud avec du Nesquik avec une tranche de pain complet.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai bu une grande tasse de thé sucré avec un peu de lait.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Un grand bol de Nesquik avec deux morceaux de baguette.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé une tartine de pain complet avec beaucoup de confiture et un peu de beurre accompagné d'un grand verre de lait chocolaté.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'aurais pu prendre une entrecôte mais le serveur m'a proposé un T-bone que je n'ai pas regretté. Je l'ai accompagné avec une écrasée de pommes de terre et des épinards à la crème. Je n'ai pas pris de fromage, par contre j'ai goûté la dernière glace de chez Picard.")
    addNewSemanticTest(queries, queryFilter, comment, context, "A l'apéro, avec des amis, nous avons mangé trois tranches de saucisson deux paquets de chips, et une poignée de cacahuètes grillées.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi j'ai mangé trois saucisses avec des petits pois et en dessert une banane et j'ai couru l'après-midi pendant une heure trente.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai mangé deux portions de Vache qui Rit avec un quignon de pain, j'ai également bu la moitié d'un grand verre de lait et mangé deux œufs. En fin de journée, j'ai couru deux heures dans le parc d'à côté à vive allure.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé un croissant et deux morceaux de baguette avec de la confiture. Au lieu de boire un thé, j'ai bu deux cafés en écoutant de la musique classique, ensuite je suis parti faire deux heures de vélo à vive allure.")
    
    #-------------------------------
    comment = "Simple case for sport"
    context = [KCALLMConst.INTENT_TEXT_TO_ACTIVITY]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "ce matin, j'ai fait une heure de vélo.")
    addNewSemanticTest(queries, queryFilter, comment, context, "ce matin, j'ai fait du vélo.")
    addNewSemanticTest(queries, queryFilter, comment, context, "ce matin, j'ai fait de la course à pied.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai fait une heure de vélo très intensément.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Hier soir, j'ai fait 2 heures de judo, j'ai bien transpiré.")

    #-------------------------------
    comment = "Simple case for food and sport"
    context = [KCALLMConst.INTENT_TEXT_TO_FOOD, KCALLMConst.INTENT_TEXT_TO_ACTIVITY]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux tasses de café et j'ai fait l'amour pendant 2 heures.")
    addNewSemanticTest(queries, queryFilter, comment, context, "En entrée j'ai pris une salade tomates et ensuite j'ai mangé un lieu noir avec des pommes de terre rissolée et une sauce au thym et enfin pour le dessert un gâteau basque.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai bu une tasse de thé et je vais partir nager à la piscine pendant une demi-heure.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai bu un grand verre de lait manger une banane une pêche et je suis allé à vélo chercher de l'argent.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi, je mangerais bien un tartare de boeuf avec des frites, et en dessert, une part de tarte aux pomme avec un café noir. J'irai courir une heure dans l'après midi.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux coupes de champagne et j'ai skié comme un fou.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu un demi verre de jus d'orange et j'ai couru 3 heures.")

    #-------------------------------
    comment = "Complex case for food and sport"
    context = [KCALLMConst.INTENT_TEXT_TO_FOOD, KCALLMConst.INTENT_TEXT_TO_ACTIVITY]
    #-------------------------------
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi, j'ai mangé un pavé de saumon accompagné d'une pomme de terre et \
d'un demi verre de vin blanc. En dessert, la tarte au pomme était excellente, j'ai également mangé \
un yaourt nature Danone aux fraises! Au fait, aujourd'hui, j'ai marché 30mn et j'ai couru 2h dans le parc voisin.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Tout compte fait, j'ai mangé une sole meunière accompagnée de haricots verts \
et d'un demi-verre de vin blanc. En dessert, la tarte au pomme était excellente! Dans deux heures, \
j'irai de toute façon courir 2h dans le parc voisin!")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce midi, je mangerais bien un tartare de boeuf avec des frites, et en dessert, \
une part de tarte à la pomme avec un café noir. J'irai courir une heure dans l'après midi.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin j'ai bu deux cafés avec trois tranches de pain et de la confiture ensuite je suis parti faire une balade en vélo pendant 1h30.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, après une heure de ski intense, j'ai mangé à midi, non pas un potage aux \
poireaux, mais une raclette accompagnée de deux verres de vin rouge, j'ai fini la journée avec du parapente.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Avant d'aller faire du ski, j'ai bu un verre de jus d'orange.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux verres de Coca et j'ai fait du vélo.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux verres de Coca et j'ai fait un peu de vélo.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu un grand verre de lait je suis allé courir deux heures dans le jardin.")
    addNewSemanticTest(queries, queryFilter, comment, context, "J'ai bu deux verres de Coca et j'ai fait du vélo à grande vitesse modérée pendant une après-midi.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Ce matin, j'ai mangé un croissant et deux morceaux de baguette avec de la confiture, et j'ai bu deux cafés en écoutant de la musique classique, ensuite je suis parti faire deux heures de vélo à vive allure.")
    addNewSemanticTest(queries, queryFilter, comment, context, "Tout compte fait ce midi j'ai mangé un pavé de saumon accompagné d'une pomme de terre \
et un demi verre de vin blanc en dessert la tarte au pomme était excellente j'ai également pris un yaourt nature danone au fait \
aujourd'hui j'ai marché 30 minutes et j'ai couru deux heures dans le parc voisin.")
    
##    #-------------------------------
##    comment = "Simple case for user settings"
##    context = [KCALLMConst.INTENT_TEXT_TO_PROFILE]
##    #-------------------------------
##    addNewSemanticTest(queries, queryFilter, comment, context, "Je suis intolérant au lactose et aux cacaohouètes et allergique au poisson.")
##    addNewSemanticTest(queries, queryFilter, comment, context, "Bonjour, je suis très motivée pour monitorer mes habitudes alimentaires. J'ai 35 ans et l'un de mes sujets de préoccupation est la planète, \
##aide-moi dans mes choices écologiques. Je ne suis pas végétarien mais je limite ma consommation de viande à \
##une fois par semaine. Au fait, j'aime beaucoup le chocolat mais pas les navets et surtout je suis intolérante au lactose.")
##
##    #-------------------------------
##    comment = "Simple case"
##    context = [INTENT_OTHER]
##    #-------------------------------
##    addNewSemanticTest(queries, queryFilter, comment, context, "j'ai pris le même petit déjeuner toute la semaine.")


#     #-------------------------------
#     comment = "Nutrition questions"
#     context = [KCALLMConst.INTENT_NUTRITION_QUESTION]
#     #-------------------------------
#     addNewSemanticTest(queries, queryFilter, comment, context, "Combien de calories dans une orange?")
#     addNewSemanticTest(queries, queryFilter, comment, context, "Entre les amandes et les noix, qui est le plus calorique?")


    return



def runMainTests(defQuery = ""):

    print()
    print("=====================================================")
    print("            EMULATOR SPEECH RECO KCALME")
    print("=====================================================")
    print()

    # https://fmzhmo3fqv3ee5ecrhastb7ay40oxira.lambda-url.eu-west-3.on.aws/?speech=J%27ai%20consomm%C3%A9%20deux%20tasses%20de%20caf%C3%A9&context=activity&key=abcd
    # http://localhost/apps/calme/gpt/nutrillm.php?speech=Ce%20matin%20j%27ai%20bu%20une%20tasse%20de%20th%C3%A9%20manger%20une%20banane%20et%20j%27ai%20couru%20pendant%20deux%20heures&context=activity&appid=F648EFA9-4594-44F3-924C-BF3792E77D6D&device=iPhone&version=15.0.0.P&age=46&gender=Female&longitude=180.0&latitude=90.0
    dumpMode = 1  # 0: optimize check, 1: force dump, 2: clean ALL directories before dumping

    # Clean
    if dumpMode == 2:
        KCALLMActivityUtilities.cleanDumps()
        print("Dump clean is done")
        exit(0)
    
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    # DO NOT SAVE ANYWAY
    doNotSave = False

    # Get all queries with filter
    queries = [] 
    queryFilter = defQuery
    queryFilter = "Ce soir je vais boire un verre de coca."
    #queryFilter = "Un grand verre de jus d'orange avec du gingembre"
    #queryFilter = "J'ai dégusté un smoothie aux kiwis"
    #queryFilter = "blanquette_de_veau"
    #queryFilter = "Ce matin, j'ai mangé une tartine de pain complet avec beaucoup de confiture et un peu de beurre accompagné d'un grand verre de lait cho"
    #queryFilter = "Ce matin j'ai mangé un yaourt Activia"
    #queryFilter = "activia"
    #queryFilter = "Ce midi, j'ai mangé un pavé de saumon accompagné d'une pomme de terre et d'un demi verre de vin blanc. En dessert, la tarte au pomme était excellente, j'ai également mangé un"
    #queryFilter = "j'ai bu un verre de coca."
    #queryFilter = "Ma caesar salad de ce soir au resto était copieuse. Ils m'a proposé une IPA mais j'ai préféré un Perrier. Enfin, j'ai mangé 2 cheesecakes."
    #queryFilter = "Ma caesar salad de ce soir au resto était copieuse. Ils m'a proposé une IPA mais j'aurais préféré un Perrier. Enfin, j'ai mangé 2 cheesecakes."
    #queryFilter = "Ce soir je vais boire un verre de coca"
    #queryFilter = "eux portions de Vache qui Rit avec un quignon de pai"
    #queryFilter = "J'ai mangé deux portions de Vache qui Rit"
    #queryFilter = "deux portions de Vache qui"
    #queryFilter = "ai mangé un Petits Fil"
    #queryFilter = "trois saucisses"
    #queryFilter = "Ce matin j'ai bu un grand verre de lait entier"
    #queryFilter = "tre les amandes et les noix, qui est le plus calor"
    #queryFilter = "Un verre et demi de d'eau"
    #queryFilter = "Un Danone nature"
    #queryFilter = "Ce midi, j'ai mangé un pavé de saumon accompagné d'une pomme de terre et d'un demi verre de vin blanc. En dessert, la tarte au pomme était excellente, j'ai également mangé un yaourt nature Danone aux fraises! Au fait, aujourd'hui, j'ai marché 30mn et j'ai couru 2h dans le parc voisin"
    #queryFilter = "Ce matin, j'ai mangé une orange"
    #queryFilter = "J'ai bu deux coupes de champagne et j'ai skié comme un fou"
    #queryFilter = "Ce matin j'ai fait une heure de vélo très intensément"
    #queryFilter = "J'ai bu deux verres de Coca et j'ai fait du vélo"
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    getAllQueries(queries, queryFilter)

    #-------------------------------
    # Out of scope
    #-------------------------------


    idx = 0
    nbQueries = len(queries)
    print("Number of queries: " + str(nbQueries))
    dumpResults = []
    for query in queries:

        # Traces
        if nbQueries > 1:
            print()
            print()
            print()
            print("=================================================================")
            print("=================================================================")
            print(" [" + str(idx + 1) + "/" + str(nbQueries) + "] Case to be checked")
            print("=================================================================")
            print("=================================================================")
            print()

        # Prompt
        text = query['prompt']
        imagePath = query['imagePath']
        ctx = query['context']
        comment = query['comment']
        imagePath = query['imagePath']
        image64 = query['image64']
        llmid = ""
        test = 1

        # Compute key
        if dumpMode == 0 and KCALLMActivityUtilities.alreadyExists(query, image64) == True and doNotSave == False:

            print("---> Query already processed: '" + query['prompt'])

        else:

            # Sleep
            model = KCALLMCore.getModelFromFamily(llmid)
            if idx >= 1:
                if model == KCALLMCore.MODEL_GPT4:
                    time.sleep(1.0)
                else:
                    time.sleep(0.1)

            # Encode
            mess = quote(text)

            # Build event
            origin = 'DS'
            event = KCALLMUtilities.buildEvent(mess, imagePath, image64, comment, test, llmid, origin)
            context = ""

            # Run service
            result = runEvent(event)

            # Dump
            if result != None and doNotSave == False:
                dr = KCALLMActivityUtilities.recordResult(result, imagePath)
                dumpResults.append(dr)

        idx+=1
