from remove_astricks import remove_ast
from load_model import call_palm
from keywords_generation import keywords_generator, keywords_generator_long_tail, filter_keywords, process_keywords
from idea_generation import ideas_generator, filter_ideas
from outline_generation import outlines_generator, filtered_outlines
from article_generation import  full_article
from product_description_generation import product_description_gen
from workout_plan_generation import workout_plan_gen
from linkedin_content_creation import linkedIn_content_gen

import X_content_creation
import blog_content_creation
import meta_content_creation
import email_writer

import streamlit as st
import spacy
from dotenv import load_dotenv, find_dotenv
import os

load_dotenv(find_dotenv())
google_api_key = os.environ['OPENAI_API_KEY']


if __name__ == '__main__':

    llm = call_palm(google_api_key) 
    
    tone_of_voice_list = ('Excited', 'Professional', 'Encouraging', 'Funny', 'Dramatic', 'Witty', 'Sarcastic', 'Engaging', 'Creative')
    languages = ('En', 'Ar', 'De', 'Fr', 'It', 'Es', 'Pt', 'Ru', 'Hi', 'Ja', 'Nl', 'Zh')
    creativity_list = ('Original', 'Balanced', 'Creative', 'Spirited', 'Visionary')
    models = ('Google Palm 2', 'GPT-3.5', 'GPT-4')

    with st.sidebar:

        st.image('Logo.png')
        choice = st.radio("Navigation", ["Articles and Blogs", "Product Description", "LinkedIn Content", "Gym Workout Plan", "Landing Page", "X Content Creation", "Meta Content", "Emails"])
        st.info("Generate your Content with Feather AI in Seconds..")

  

    if choice == 'Product Description':

        product_name = st.text_input('Product Name')
        product_desc =  st.text_area('Product Description')
        tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
        model = st.selectbox('Choose the Model', models)
        creativity = st.selectbox('Creativity Level', creativity_list)
        language = st.selectbox('Choose a language', languages)

        if product_name and product_desc and tone_of_voice and model and creativity and language:

            if st.button('Generate'):

                product_description = product_description_gen(product_name, product_desc, tone_of_voice=tone_of_voice, model_name=model, creativity=creativity, language=language)
                st.markdown(product_description)

    elif choice == 'LinkedIn Content':

        linkedIn_content_generation = linkedIn_content_gen()

        linkedIn_choices_list = ('LinkedIn Post', 'LinkedIn Ads')
        
        linkedIn_choices = st.selectbox('Choose LinkedIn Template', linkedIn_choices_list)

        if linkedIn_choices == linkedIn_choices_list[0]:
            

            topic = st.text_input('Topic')
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and tone_of_voice and model and creativity and language:

                if st.button('Generate'):

                    linkedIn_post = linkedIn_content_generation.linkedIn_post_gen(topic, tone_of_voice, language=language, model_name=model, creativity=creativity)
                    st.markdown(linkedIn_post)

        elif linkedIn_choices == linkedIn_choices_list[1]:

            product_name = st.text_input('Product Name')
            product_desc = st.text_area('Product Description')
            target_audience = st.text_input('Target Audience')
            target_keywords = st.text_input('Target Keywords')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if product_name and product_desc and target_audience and target_keywords and model and creativity and language:

                if st.button('Generate'):

                    linkedIn_ad = linkedIn_content_generation.linkedIn_ads_gen(product_name, product_desc, target_audience, target_keywords, language=language, model_name=model, creativity=creativity)
                    st.markdown(linkedIn_ad)


    elif choice == "Gym Workout Plan":

        fitness_level_list = ('Beginner', 'Intermediate', 'Advanced', 'Elite')
        health_consd_list = ('Cutting Phase', 'Bulking Phase', 'Maintenance Phase', 'Lean Muscle Gain')
        routine_list = ('Bro Split', 'Push Pull Leg', 'Upper and Lower', 'Full Body')

        fitness_level = st.selectbox('Fitness Level', fitness_level_list)
        days = st.slider('Avaliable Days Per Week',1,7,4)
        hours = st.slider('Avaliable Hours Per Day',1,6,2)
        health_consd = st.selectbox('Health Considerations',health_consd_list)
        routine = st.selectbox("Preferred Routine", routine_list)
        my_goals = st.text_input('Goals')

        model = st.selectbox('Choose a Model', models)
        creativity = st.selectbox('Creativity Level', creativity_list)
        language = st.selectbox('Select a Language', languages)

        if fitness_level  and days and hours and health_consd and routine and my_goals and model and creativity and language: 

            if st.button('Generate'):
                
                workout_plan = workout_plan_gen(my_goals, fitness_level, days, hours, health_consd, routine, model_name=model, creativity=creativity, language=language)
                st.markdown(workout_plan)

    elif choice == "Landing Page":

        #product_name = st.text_input('Product Name')
        #product_desc = st.text_area('Description')
        #target_audience = st.text_input('Target Audience')
        #goal = st.text_input('Goal')
        st.title('Not Working')
        #if product_name and product_desc and target_audience and goal:

            #if st.button('Generate'):

                #landing_page = landing_page_gen(product_name, product_desc, target_audience, goal, llm)
                #st.markdown(landing_page)

    
    elif choice == 'X Content Creation':

        X_content = X_content_creation.X_Generator()

        x_choices_list = ('X thread', 'X Retweet Commenting', 'X Campaign', 'X Bio Creation', 'Article Conversion to X Thread')
        
        x_choices = st.selectbox('Choose X Template', x_choices_list)

        if x_choices == x_choices_list[0]:

            topic = st.text_input('Topic')
            num_tweets = st.slider('Number of Thread tweet', 1,10,5)
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and num_tweets and tone_of_voice and model and creativity and language:  
                
                if st.button('Generate'):

                    X_thread = X_content.x_thread_gen(topic, num_tweets, tone_of_voice, language=language, model_name=model, creativity=creativity)
                    intro = X_content.x_thread_gen_intro(topic, X_thread, tone_of_voice, language=language, model_name=model, creativity=creativity)
                    st.markdown(intro)
                    st.markdown(X_thread)

        elif x_choices == x_choices_list[1]:


            tweet = st.text_area('Tweet')
            tone_of_voice = st.selectbox('Tone of voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if tweet and tone_of_voice and model and creativity and language:

                if st.button('Generate'):

                    x_retweet_comment = X_content.x_retweet_commenting_gen(tweet, tone_of_voice, language=language, model_name=model, creativity=creativity)
                    st.markdown(x_retweet_comment)

        elif x_choices == x_choices_list[2]:

            product_name = st.text_input('Product Name')
            product_desc = st.text_area('Product Description')
            goal = st.text_input('Goal')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)


            if product_name and product_desc and goal and model and creativity and language:

                if st.button('Generate'):

                    x_camp = X_content.x_camp_gen(product_name, product_desc, goal, language=language, model_name=model, creativity=creativity)
                    st.markdown(x_camp)

        elif x_choices == x_choices_list[3]:

            info = st.text_area('info')
            tone_of_voice = st.selectbox('Tone of voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if info and tone_of_voice and model and creativity and language:

                if st.button('Generate'):

                    x_bio = X_content.x_bio_gen(info, tone_of_voice, language=language, model_name=model, creativity=creativity)
                    st.markdown(x_bio)

        elif x_choices == x_choices_list[4]:

            article = st.text_area('Article')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if article and model and creativity and language:

                if st.button('Generate'):

                    article_to_x_thread = X_content.article_to_x_thread_gen(article, language=language, model_name=model, creativity=creativity)
                    st.markdown(article_to_x_thread)

    elif choice == 'Articles and Blogs':

        blog_content = blog_content_creation.blog_content_generation()

        blog_choices_list = ('Article Writer', 'Blog Post', 'Blog Ideas', 'Blog Tags', 'Blog Ideas description')
        
        blog_choices = st.selectbox('Choose Blog Template', blog_choices_list)

        

        if blog_choices == blog_choices_list[0]:
            
            topic = st.text_input('Topic')
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and tone_of_voice and model and creativity and language:

                keywords =  keywords_generator(topic, num_keywords=10, language=language, model_name=model, creativity=creativity)
                keywords_gen_long_tail = keywords_generator_long_tail(topic, num_keywords=10, language=language, model_name=model, creativity=creativity)

                filtered_keywords = filter_keywords(keywords)
                filtered_keywords_long_tail = filter_keywords(keywords_gen_long_tail)

                formatted_keywords = process_keywords(filtered_keywords)
                formatted_keywords_long_tail = process_keywords(filtered_keywords_long_tail)

                st.markdown('### Generated Keywords:\n')
                st.markdown(formatted_keywords)

                formatted_keywords = remove_ast(formatted_keywords)
                formatted_keywords_long_tail = remove_ast(formatted_keywords_long_tail)


                idea_numbers = st.slider("How many ideas you want?",1,10,5)

                ideas = ideas_generator(topic, formatted_keywords_long_tail, tone_of_voice=tone_of_voice, num_of_ideas=idea_numbers, language=language, model_name=model, creativity=creativity)
                filtered_ideas = filter_ideas(ideas)
                
                index = 1

                st.markdown("### Generated Ideas:\n")

                for idea in filtered_ideas:

                    st.markdown(f"{index} - {idea}")
                    index+=1

                st.text('\n')

                num_idea = st.text_input("Choose the idea you want by number")

                if num_idea:

                    num_idea = int(num_idea)
                    idea = filtered_ideas[num_idea-1]
                    idea = remove_ast(idea)

                    outline = outlines_generator(idea,formatted_keywords_long_tail, language=language, model_name=model, creativity=creativity)

                    st.text('\n')
                    st.markdown("### Generated Outline:\n")
                    st.markdown(outline)
                    outline_list = filtered_outlines(outline)

                    outline_list2=[]

                    for section in outline_list:
                        
                        cleaned_section = remove_ast(section)
                        outline_list2.append(cleaned_section)

                    if st.button('Generate'):

                        article = full_article(idea, outline_list2, tone_of_voice=tone_of_voice, language=language, model_name=model, creativity=creativity)

                        st.markdown("# Your Article:\n")
                        st.markdown(f"{idea}\n")
                        st.markdown('\n\n'.join(article))
                        st.text('\n\n')

                        num_full_art_chars = len('\n'.join(article))
                        nlp = spacy.load('en_core_web_sm')
                        doc = nlp('\n'.join(article))
                        num_full_art_words = len(doc)

                        st.markdown(f"{num_full_art_chars} Characters")
                        st.markdown(f"{num_full_art_words} Words")

        elif blog_choices == blog_choices_list[1]:

            topic = st.text_input('Topic')
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and tone_of_voice and model and creativity and language:

                if st.button('Generate'):
                    blog_post = blog_content.blog_post_gen(topic, tone_of_voice=tone_of_voice, language=language, creativity=creativity, model_name=model)
                    st.markdown(blog_post)

        elif blog_choices == blog_choices_list[2]:

            topic = st.text_input('Topic')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic:

                if st.button('Generate'):

                    blog_idea = blog_content.blog_idea_gen(topic, model_name=model, creativity=creativity, language=language)
                    st.markdown(blog_idea)

        elif blog_choices == blog_choices_list[4]:

            topic = st.text_input('topic')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and model and creativity and language:

                if st.button('Generate'):

                    blog_idea_desc = blog_content.blog_idea_desc_gen(topic, model_name=model, creativity=creativity, language=language)
                    st.markdown(blog_idea_desc)

        elif blog_choices == blog_choices_list[3]:

            blog = st.text_area('Blog')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if blog and model and creativity and language:

                if st.button('Generate'):

                    blog_tags = blog_content.blog_tags_gen(blog, model_name=model, creativity=creativity, language=language)
                    st.markdown(blog_tags)

    elif choice == 'Meta Content':
        
        meta_content_gen = meta_content_creation.meta_content_generation()

        meta_choices_list = ('Facebook Post', 'Facebook Ads', 'Facebook Campaign', 'Insta Image Captioning')
        
        meta_choices = st.selectbox('Choose Blog Template', meta_choices_list)


        if meta_choices == meta_choices_list[0]:

            topic = st.text_input("Topic")
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if topic and tone_of_voice and model and creativity and language:

                if st.button('Generate'):

                    facebook_post = meta_content_gen.facebook_post_gen(tone_of_voice, topic, language=language, model_name=model, creativity=creativity)
                    st.markdown(facebook_post)

        elif meta_choices == meta_choices_list[1]:

            product_name = st.text_input('Product Name')
            product_desc = st.text_area('Description')
            targeted_audience = st.text_input('Target Audience')
            plans_proms = st.text_input('Plan and Promotions')
            tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if product_name and product_desc and tone_of_voice and model and creativity and language:

                if st.button('Generate'):

                    face_ad__prom = meta_content_gen.facebook_ads_gen(product_name, product_desc, tone_of_voice, targeted_audience, plans_proms, language=language, model_name=model, creativity=creativity)
                    st.markdown(face_ad__prom)

        elif meta_choices == meta_choices_list[2]:

            product_name = st.text_input('Product Name')
            product_desc = st.text_area('Product Description')
            days = st.selectbox('Days', (10,15,20,25,30))
            goal = st.text_input('Goal')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if product_name and product_desc and goal and days and model and creativity and language:

                if st.button('Generate'):

                    facebook_camp = meta_content_gen.facbook_camp_gen(product_name, product_desc, days, goal, language=language, model_name=model, creativity=creativity)
                    st.markdown(facebook_camp)

        elif meta_choices == meta_choices_list[3]:

            uploaded_file = st.file_uploader("Choose an image...", type=["jpg","jpeg","png"])

            if uploaded_file is not None:
                    
                    bytes_data = uploaded_file.getvalue()
                    with open(uploaded_file.name, "wb") as file:
                        file.write(bytes_data)
                    
                    st.image(uploaded_file, caption="Uploaded image",
                        use_column_width=True, width=500)
                    
                    scenario = meta_content_gen.img2text(uploaded_file.name)

                    st.subheader("Image Scenario:")
                    with st.expander("scenario"):
                        st.write(scenario)

                    tone_of_voice = st.selectbox('Tone of Voice', tone_of_voice_list)
                    form = st.selectbox('Caption Form', ('Short Form', 'Medium Form', 'Long Form'))
                    model = st.selectbox('Choose a model', models)
                    creativity = st.selectbox('Choose a creativity', creativity_list)
                    language = st.selectbox('Choose a language', languages)

                    if tone_of_voice and form and model and creativity and language:

                        if st.button('Generate'):

                            st.subheader("Generated Instagram Image according to the scenario:")                    
                            instaCap = meta_content_gen.generate_InstaCap(scenario, tone_of_voice, form, language=language, model_name=model, creativity=creativity)
                            st.markdown(instaCap)

    elif choice == 'Emails':

        email_content_gen = email_writer.email_writing()

        email_choices_list = ('Email Writer', 'Email Marketing Campaign')
        
        email_choices = st.selectbox('Choose Emai Template', email_choices_list)

        if email_choices == email_choices_list[0]:

            recipient = st.text_input('Recipient')
            recipient_position = st.text_input('Recipient Position')
            sender_name = st.text_input('Sender Name')
            position_sender = st.text_input('Sender Position')
            description = st.text_area('Description')
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if recipient and recipient_position and sender_name and position_sender and description and model and creativity and language:

                if st.button('Generate'):
                    
                    email = email_content_gen.email_gen(recipient, recipient_position, sender_name, position_sender, description, language=language, model_name=model, creativity=creativity)
                    email_subject = email_content_gen.email_subject_gen(email)
                    st.markdown(f'Subject: {email_subject}')
                    st.markdown(email)

        elif email_choices == email_choices_list[1]:

            product_name = st.text_input("Product Name")
            product_description = st.text_area("Product Description")
            target_audience = st.text_input("Target Audience")
            goal = st.text_input("Goal")
            model = st.selectbox('Choose a model', models)
            creativity = st.selectbox('Choose a creativity', creativity_list)
            language = st.selectbox('Choose a language', languages)

            if product_name and product_description and target_audience and goal and model and creativity and language:
                
                if st.button("Generate"):

                    email_marketing_camp = email_content_gen.email_marketing_campaigns_gen(product_name, product_description, target_audience, goal, language=language, model_name=model, creativity=creativity)
                    st.markdown(email_marketing_camp)