import streamlit as st
import requests
import os

# Access the Hugging Face token from the environment variable
HF_TOKEN = os.environ.get("HF_TOKEN")
if not HF_TOKEN:
    st.error("Hugging Face token not found. Please check your Secrets configuration.")
    st.stop()

# Hugging Face Inference API endpoints
SENTIMENT_API_URL = "https://api-inference.huggingface.co/models/distilbert-base-uncased-finetuned-sst-2-english"
TEXT_GENERATION_API_URL = "https://api-inference.huggingface.co/models/gpt2"
HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}

# Tea recommendations based on mood
tea_recommendations = {
    "POSITIVE": {
        "description": "Perfect for celebrating your joy!",
        "teas": ["Fruit Infusion Tea", "Hibiscus Tea", "Earl Grey Tea"],
        "health_benefits": "Boosts mood, rich in vitamins, and supports heart health.",
        "recipe": "Steep for 6 minutes in hot water (95°C). Add sugar or fruit slices for extra flavor."
    },
    "NEGATIVE": {
        "description": "Calm your mind and reduce stress.",
        "teas": ["Peppermint Tea", "Lemon Balm Tea", "Rooibos Tea"],
        "health_benefits": "Relieves anxiety, soothes digestion, and reduces tension.",
        "recipe": "Steep for 4 minutes in boiling water. Add lemon for a refreshing twist."
    }
}

# Function to detect mood using Hugging Face Inference API
def detect_mood(user_input):
    try:
        payload = {"inputs": user_input}
        response = requests.post(SENTIMENT_API_URL, headers=HEADERS, json=payload)
        if response.status_code == 200:
            result = response.json()
            if isinstance(result, list) and len(result) > 0:
                return result[0][0]["label"]  # Returns "POSITIVE" or "NEGATIVE"
        return "POSITIVE"  # Default to positive if API fails
    except Exception as e:
        st.error(f"Error detecting mood: {e}")
        return "POSITIVE"  # Fallback to positive mood

# Function to generate personalized tea recommendations using Hugging Face Inference API
def personalized_recommendation(user_input):
    try:
        prompt = f"Based on the following preferences: '{user_input}', suggest a type of tea and explain why it's a good fit."
        payload = {"inputs": prompt, "max_length": 100, "num_return_sequences": 1}
        response = requests.post(TEXT_GENERATION_API_URL, headers=HEADERS, json=payload)
        if response.status_code == 200:
            result = response.json()
            if isinstance(result, list) and len(result) > 0:
                return result[0]["generated_text"]
        return "I recommend trying Chamomile Tea for its calming properties."  # Default recommendation if API fails
    except Exception as e:
        st.error(f"Error generating recommendation: {e}")
        return "I recommend trying Chamomile Tea for its calming properties."  # Fallback recommendation

# Streamlit app
def main():
    st.title("🍵 Tea Time Logic")
    st.write("Welcome to your AI-powered tea recommendation app! Describe how you're feeling, and we'll suggest the perfect tea for you.")

    # User input for mood detection
    user_input = st.text_input("Describe how you're feeling today:")
    if user_input:
        mood = detect_mood(user_input)
        st.write(f"**Detected Mood:** {mood}")
        st.subheader(f"Tea Recommendations for Feeling {mood}:")
        st.write(tea_recommendations[mood]["description"])
        st.write("**Recommended Teas:**")
        for tea in tea_recommendations[mood]["teas"]:
            st.write(f"- {tea}")
        st.write("**Health Benefits:**")
        st.write(tea_recommendations[mood]["health_benefits"])
        st.write("**Brewing Recipe:**")
        st.write(tea_recommendations[mood]["recipe"])

    # Personalized recommendations
    st.subheader("Personalized Tea Recommendations")
    preference_input = st.text_input("Describe your preferences (e.g., 'I like sweet and floral teas'):")
    if preference_input:
        recommendation = personalized_recommendation(preference_input)
        st.write("**Your Personalized Recommendation:**")
        st.write(recommendation)

    # Footer
    st.write("---")
    st.write("Enjoy your tea and have a wonderful day! 😊")

if __name__ == "__main__":
    main()