import string
from collections import Counter
from nltk.corpus import stopwords
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize

def textAnalyze(speech):
    text = speech

    lower_case = text.lower()
    cleaned_text = lower_case.translate(str.maketrans('', '', string.punctuation))

    # Using word_tokenize because it's faster than split()
    tokenized_words = word_tokenize(cleaned_text, "english")

    # Removing Stop Words
    final_words = []
    for word in tokenized_words:
        if word not in stopwords.words('english'):
            final_words.append(word)

    # Lemmatization
    lemma_words = []
    for word in final_words:
        word = WordNetLemmatizer().lemmatize(word)
        lemma_words.append(word)

    emotion_list = []

    for i in final_words:
        with open('Emotion/emotions.txt', 'r') as file:
            for line in file:
                clear_line = line.replace("\n", '').replace(",", '').replace("'", '').strip()
                word, emotion = clear_line.split(':')
                if i in word:
                    final_emotion = emotion.replace("", '').strip()
                    def sentiment_analyse(sentiment_text):
                        score = SentimentIntensityAnalyzer().polarity_scores(sentiment_text)
                        if score['neg'] > score['pos']:
                            emotion_list.append(final_emotion)
                        elif score['neg'] < score['pos']:
                            emotion_list.append(final_emotion)
                        else:
                            emotion_list.append(final_emotion)
                    sentiment_analyse(word)

    print(emotion_list)
    w = emotion_list
    print(w)
    return {
        "message": w
    }
