from flask import Flask, render_template, request, redirect, url_for
import requests
from PIL import Image
from io import BytesIO
import base64

app = Flask(__name__)

# Replace with your own API keys
CLIP_API_KEY = "your_clip_api_key"
STABLE_DIFFUSION_API_KEY = "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"

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/generate', methods=['POST'])
def generate():
    image = request.files['image']
    mood = get_mood_from_image(image)
    
    if mood:
        art, narrative = generate_art_and_narrative(mood)
        return render_template('result.html', art=art, narrative=narrative)
    else:
        return redirect(url_for('index'))

def get_mood_from_image(image):
    # Implement mood classification logic using the CLIP API
    moods = ["happy", "sad", "angry", "neutral"]
    prompt = "The mood of the person in this image is: "
    
    headers = {
        "Authorization": f"Bearer {CLIP_API_KEY}"
    }
    
    # Convert the image to base64
    image_base64 = base64.b64encode(image.read()).decode('utf-8')
    
    json_data = {
        "inputs": [{"data": {"image": {"base64": image_base64}}, "prompt": prompt} for mood in moods]
    }
    
    response = requests.post('https://api-inference.huggingface.co/models/openai/clip-vit-base-patch32', headers=headers, json=json_data).json()

    mood_scores = {}
    for choice, mood in zip(response, moods):
        mood_scores[mood] = float(choice['scores'][0])

    # Filter moods with a score above 60%
    filtered_moods = {k: v for k, v in mood_scores.items() if v > 0.6}

    if len(filtered_moods) < 2:
        return None

    return filtered_moods

def generate_art_and_narrative(mood):
    # Implement art generation logic using the Stable Diffusion API
    pass

if __name__ == '__main__':
    app.run(debug=True)