import os
import pandas as pd
import chainlit as cl
from pinecone import Pinecone
from chainlit.input_widget import Select, TextInput
from chainlit import user_session

def connexion_vector_database_secteurs():
    os.environ['PINECONE_API_KEY'] = os.environ['PINECONE_API_KEY']
    os.environ['PINECONE_INDEX_NAME'] = os.environ['PINECONE_INDEX_NAME']
    pc = Pinecone(api_key=os.environ["PINECONE_API_KEY"])
    index = pc.Index(index_name=os.environ['PINECONE_INDEX_NAME'])
    allsecteurs = index.query(
        top_k=515,
        vector= [0] * 768, # embedding dimension
        namespace='',
        include_metadata=True,
        include_values=True,
        filter={'categorie': {'$eq': 'inpiSecteur'}}
    )
    secteurs = []
    for i in range(0,len(allsecteurs['matches'])):
        secteurs.append(str(allsecteurs['matches'][i]['metadata']['activiteprincipale']) + " " + str(allsecteurs['matches'][i]['metadata']['activitesecondaire']))
    return secteurs
    
async def homeRome():
    app_user = cl.user_session.get("user")
    welcomeUser = app_user.identifier
    welcomeUserArray = welcomeUser.split('@')
    welcomeUserStr = welcomeUserArray[0].replace('.',' ')
    await cl.Message(f"> Bonjour {welcomeUserStr}").send()
    fileCompetences = "./public/referentiel_competence.csv"
    df_allcompetences = pd.read_csv(fileCompetences)
    df_competences = df_allcompetences[['libelle_competence']].copy()
    df_competences = df_competences.sort_values(by=['libelle_competence'])
    competences_list = df_competences['libelle_competence'].tolist()
    competences_list.sort()
    competences_list.insert(0, "")
    cl.user_session.set("arraySettingsComp", competences_list)
    settings = await cl.ChatSettings(
        [
            Select(
                id="competence",
                label="Compétences",
                values=competences_list,
                initial_index=0,
            ),
            TextInput(id="competenceInput", label="ou saisir une compétence voire des objectifs pédagogiques", placeholder="ou saisir une compétence voire des objectifs pédagogiques", tooltip="saisir une compétence voire des objectifs pédagogiques"),
        ]
    ).send()
    value = settings["competence"]
    
    if len(value) < 2:
        warning = [
                    cl.Image(name="Warning", size="small", display="inline", path="./public/warning.png")
        ]
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="1️⃣ Cliquez sur le bouton dont l'image suit, dans le prompt, pour commencer à élaborer une note sectorielle de la chaîne documentaire APCC!").send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="", elements=warning).send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="2️⃣ Puis sélectionnez ou saisissez une compétence ou des objectifs pédagogiques. Et vous êtes prêt!\n\n🔗 Plateforme de feedback et de fil d'activité : https://cloud.getliteral.ai/").send()
        
    contextChat = cl.user_session.get("contextChatBot")
    
    if not contextChat:
        contextChat = df_competences.to_string(index = False)
	
    cl.user_session.set("contextDFCOMPChatBot", df_competences.to_string(index = False))
    return contextChat

async def homeEsco():
    app_user = cl.user_session.get("user")
    
    welcomeUser = app_user.identifier
    
    welcomeUserArray = welcomeUser.split('@')
    welcomeUserStr = welcomeUserArray[0].replace('.',' ')
    await cl.Message(f"> Bonjour {welcomeUserStr}").send()   
    fileCompetences = "./public/escoCompetencesAppellation.csv"
    df_allcompetences = pd.read_csv(fileCompetences)
    df_competences = df_allcompetences[['compétence']].copy()
    df_competences = df_competences.sort_values(by=['compétence'])
    competences_list = df_competences['compétence'].tolist()
    competences_list.sort()
    competences_list.insert(0, "")
    cl.user_session.set("arraySettingsComp", competences_list)
    settings = await cl.ChatSettings(
        [
            Select(
                id="competence",
                label="Compétences",
                values=competences_list,
                initial_index=0,
            ),
            TextInput(id="competenceInput", label="ou saisir une compétence voire un métier en lien avec le développement durable", placeholder="ou saisir une compétence voire un métier en lien avec le développement durable", tooltip="saisir une compétence voire un métier en lien avec le développement durable"),
        ]
    ).send()
    value = settings["competence"]
    
    if len(value) < 2:
        warning = [
                    cl.Image(name="Warning", size="small", display="inline", path="./public/warning.png")
        ]
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="1️⃣ Cliquez sur le bouton dont l'image suit, dans le prompt, pour commencer à élaborer une analyse des compétences liées au développement durable!").send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="", elements=warning).send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="2️⃣ Puis sélectionnez ou saisissez une compétence ou un métier en lien avec le développement durable. Et vous êtes prêt!\n\n🔗 Plateforme de feedback et de fil d'activité : https://cloud.getliteral.ai/").send()
        
    contextChat = cl.user_session.get("contextChatBot")
	
    if not contextChat:
        contextChat = df_competences.to_string(index = False)
    
    cl.user_session.set("contextDFCOMPChatBot", df_competences.to_string(index = False))
    return contextChat

async def homeRne():
    app_user = cl.user_session.get("user")
    welcomeUser = app_user.identifier
    welcomeUserArray = welcomeUser.split('@')
    welcomeUserStr = welcomeUserArray[0].replace('.',' ')
    await cl.Message(f"> Bonjour {welcomeUserStr}").send()
    secteurs_list = connexion_vector_database_secteurs()
    secteurs_list.sort()
    secteurs_list.insert(0, "")
    df_secteurs = pd.DataFrame(secteurs_list)
    cl.user_session.set("arraySettingsComp", secteurs_list)
    settings = await cl.ChatSettings(
        [
            Select(
                id="competence",
                label="Secteurs",
                values=secteurs_list,
                initial_index=0,
            ),
            TextInput(id="competenceInput", label="ou saisir un secteur d'activités", placeholder="ou saisir un secteur d'activités", tooltip="saisir un secteur d'activités"),
        ]
    ).send()
    value = settings["competence"]
    
    if len(value) < 2:
        warning = [
                    cl.Image(name="Warning", size="small", display="inline", path="./public/warning.png")
        ]
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="1️⃣ Cliquez sur le bouton dont l'image suit, dans le prompt, pour commencer à élaborer une liste d'entreprises du secteur d'activités de votre choix!").send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="", elements=warning).send()
        await cl.Message(author="Datapcc : 🌐🌐🌐",content="2️⃣ Puis sélectionnez ou saisissez un secteur d'activités. Et vous êtes prêt!\n\n🔗 Plateforme de feedback et de fil d'activité : https://cloud.getliteral.ai/").send()
        
    contextChat = cl.user_session.get("contextChatBot")
    
    if not contextChat:
        contextChat = df_secteurs.to_string(index = False)
	
    cl.user_session.set("contextDFCOMPChatBot", df_secteurs.to_string(index = False))
    return contextChat