import streamlit as st
from g4f.client import Client

client = Client()

def generate_response(messages):
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
    )
    return response.choices[0].message.content

def title_template(topic):
    return f"Write me a YouTube video title about {topic}"

def script_template(title, wikipedia_search):
    return f"Write me a YouTube script based on this title: TITLE: {title} while leveraging this Wikipedia research: {wikipedia_search}."

def wikipedia_search(topic):
    search_response = generate_response([{"role": "user", "content": f"Search Wikipedia for {topic} and summarize the information."}])
    return search_response

st.title("🎥 YouTube Script GPT")
st.caption("📝 Enter the topic you want for your Youtube Content and get the full script in detail")
st.caption("Made by Samagra Shrivastava with ♥")
input_text = st.chat_input("Enter a topic for your YouTube video...")

if input_text:
    with st.spinner('Generating title and script ⌛...'):
        title_prompt = title_template(input_text)
        title = generate_response([{"role": "user", "content": title_prompt}])

    with st.spinner('Searching Wikipedia...'):
        wiki_research = wikipedia_search(input_text)

    with st.spinner('Generating script...'):
        script_prompt = script_template(title, wiki_research)
        script = generate_response([{"role": "user", "content": script_prompt}])

    st.subheader("Generated Title 😎")
    st.write(title)
    
    st.subheader("Generated Script 📜")
    st.write(script)
    
    st.subheader("Wikipedia Research 🔍")
    st.write(wiki_research)
    
    with st.expander("Title History"):
        st.info(f"Topic: {input_text}\nTitle: {title}")
    
    with st.expander("Script History"):
        st.info(script)
    
    with st.expander("Wikipedia Research Details"):
        st.info(wiki_research)