import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt



import pandas as pd
import streamlit as st
from transformers import pipeline
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, balanced_accuracy_score
from PIL import Image
from transformers import AutoTokenizer, AutoModelForSequenceClassification,pipeline

# Charger le modèle pré-entraîné
classifier_model = "morit/french_xlm_xnli"
classifier_model ="MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7"
tokenizer=AutoTokenizer.from_pretrained(classifier_model)

classifier=pipeline("zero-shot-classification",model=classifier_model,tokenizer=tokenizer)

# Charger les données depuis le fichier CSV
df = pd.read_csv("fic.csv",sep=";")
# Récupérer les commentaires en liste
comments = df["text"].tolist()

# Afficher l'entête
st.header("Analyse de Texte")

st.subheader("Choisir les etiquettes a considerer")
col1, col2,col3,col4= st.columns(4)  # Crée deux colonnes

with col1:
    # Case à cocher dans la première colonne
   joie_au_travail = st.checkbox("joie_au_travail", value=True)  # Pré-cochée
with col2:
    # Case à cocher dans la deuxième colonne
    harcelement_moral = st.checkbox("harcelement_moral", value=True)  # Pré-cochée
with col3:
    # Case à cocher dans la deuxième colonne
    epuisement_professionel = st.checkbox("epuisement_professionnel", value=True)  # Pré-cochée
with col4:
    # Case à cocher dans la deuxième colonne
    neutre = st.checkbox("neutre", value=True)  # Pré-cochée
# Collecter les labels choisis dans une liste
candidate_labels = []
if joie_au_travail:
    candidate_labels.append("joie_au_travail")  # Remplacer par le label exact pour "positif"
if harcelement_moral:
    candidate_labels.append("harcelement_moral")  # Remplacer par le label exact pour "négatif"
if epuisement_professionel:
    candidate_labels.append("epuisement_professionel")  # Remplacer par le label exact pour "négatif"
if neutre:
    candidate_labels.append("neutre")  # Remplacer par le label exact pour "négatif"
# Créer une selectbox pour choisir un commentaire

# Afficher le commentaire sélectionné dans l'input text
text = st.text_area('Entrer le texte à analyser')


# Modèle de phrase pour la formation de l'hypothèse
hypothesis_template = "Cet exemple est un  {}."


#sil ya du texte et les etiquettes sont choisies on affiche un histogramme avec les etiquettes(joie,tristesse,surcharge) et leur probabilité

if text:
    result = classifier(text, candidate_labels, hypothesis_template=hypothesis_template,truncation=True,max_length=1000)
    #st.info(f"Résultat: {result['labels'][0]} avec une confiance de {result['scores'][0]*100:.2f}%")
    # if result['labels'][0]==1:
    #     st.info(f"Résultat: commentaire positive avec une confiance de {result['scores'][0]*100:.2f}%")
    # if result['labels'][0]==0:
    #     st.info(f"Résultat: commentaire negative avec une confiance de {result['scores'][0]*100:.2f}%")
    # if result['labels'][0]==2:
    #     st.info(f"Résultat: commentaire neutre avec une confiance de {result['scores'][0]*100:.2f}%")
    # Créer un dataframe pour l'affichage des résultats
    df_result = pd.DataFrame({
        "Etiquette": result["labels"],
        "Probabilité": result["scores"]
    })
#bouton pour geerer le texte saisi
if st.button("Analyser") :
    # Afficher les résultats sous forme de tableau
    st.header("Résultats")
    #st.table(df_result)
    

    # représenter les résultats sous forme d'histogramme
    #taille de la figure
    # fig, ax = plt.subplots(figsize=(4, 2))
    # ax.bar(df_result["Etiquette"], df_result["Probabilité"])
    # ax.set_xticklabels(["A", "B", "C","D"])
    # ax.set_ylabel("Probabilité")
    # ax.set_title("Probabilité de chaque étiquette")
    # ax.legend(["Probabilité"])
    
    fig, ax = plt.subplots(figsize=(8, 4))
    bars = ax.bar(df_result["Etiquette"], df_result["Probabilité"])
    
    # Ajouter des annotations de texte pour chaque barre
    for bar in bars:
        yval = bar.get_height()
        ax.text(bar.get_x() + bar.get_width()/2, yval, round(yval, 2), ha='center', va='bottom')
    
    ax.set_xlabel("Etiquette")
    ax.set_ylabel("Probabilité")
    ax.set_title("Probabilité de chaque étiquette")
    
    # Afficher la légende
    ax.legend(['Probabilité'], loc='upper right')
    st.pyplot(fig)
#traitement ded données:train_test_split
st.header("Decoupage de notre dataset")
image=Image.open("train_test.PNG")
st.image(image, caption='Train_test_Split', use_column_width=True)

# Faire un tableau explicatives de metriques de performance(accuarcy,precision,recall,f1-score,balanced accuracy)
st.header("Métriques de Performance")
metrics_df = pd.DataFrame({
        "Métrique": ["Accuracy", "Precision", "Recall", "F1-score", "Balanced Accuracy"],
        "Valeur": ['Pourcentage de prédictions correctes', 'Pourcentage de prédictions positives correctes', 'Pourcentage de vrais positifs prédits', 'Moyenne pondérée de la précision et du rappel', 'Moyenne du rappel pour chaque classe']
    })
st.table(metrics_df)


#Ce matin, j'ai été submergé de joie en recevant la promotion tant attendue, un moment vraiment heureux. Cependant, l'annonce du départ soudain de mon collègue préféré a apporté une vague de tristesse. Face à ces nouvelles responsabilités, je me sens déjà surchargé, me demandant comment je vais gérer tout cela