import gradio as gr
import openai
import os
import requests

# OpenAI API 키 설정
openai.api_key = os.getenv("OPENAI_API_KEY")

# Pexels API 키 설정
PEXELS_API_KEY = "5woz23MGx1QrSY0WHFb0BRi29JvbXPu97Hg0xnklYgHUI8G0w23FKH62"

def generate_keyword_from_text(input_text):
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[{
                'role': 'user',
                'content': f"다음 텍스트를 바탕으로 Pexels에서 잘 검색될 영문 키워드 한 줄을 생성하세요: '{input_text}'"
            }]
        )
        keyword_full_response = response['choices'][0]['message']['content']
        keyword = keyword_full_response.split('\n', 1)[0].strip()
        if keyword.startswith('"') and keyword.endswith('"'):
            keyword = keyword[1:-1].strip()
        return keyword
    except Exception as e:
        print(f"에러 발생: {e}")
        return f"키워드 생성 중 에러 발생: {e}"

def search_pexels(keyword):
    headers = {
        'Authorization': PEXELS_API_KEY
    }
    params = {
        'query': keyword,
        'per_page': 10
    }
    try:
        response = requests.get('https://api.pexels.com/v1/search', headers=headers, params=params)
        response.raise_for_status()
        data = response.json()
        image_urls = [photo['src']['medium'] for photo in data['photos']]
        return image_urls
    except Exception as e:
        print(f"Pexels API 에러: {e}")
        return []

def keyword_to_images(input_text):
    lines = input_text.split('\n')  # 입력 텍스트를 줄 단위로 분리
    all_image_urls = []
    for line in lines:
        if not line.strip():  # 비어 있는 줄은 건너뜀
            continue
        keyword = generate_keyword_from_text(line)
        if keyword.startswith("키워드 생성 중 에러 발생"):
            continue  # 키워드 생성 중 에러가 발생한 경우, 그 줄은 건너뜀
        image_urls = search_pexels(keyword)
        all_image_urls.extend(image_urls)  # 각 키워드별 검색 결과를 모두 합침
    return all_image_urls

# Gradio 인터페이스 설정과 실행
iface = gr.Interface(
    fn=keyword_to_images,
    inputs=gr.Textbox(lines=10, placeholder="여기에 Pexels 검색을 위한 텍스트를 입력하세요. 각 줄마다 별도의 검색 키워드가 생성됩니다."),
    outputs=gr.Gallery(),
    title="GPT 및 Pexels API를 이용한 다중 이미지 검색",
    description="제공된 텍스트의 각 줄을 바탕으로 Pexels 검색에 사용할 영문 키워드를 자동 생성하고, 해당 키워드로 Pexels에서 이미지를 검색합니다."
)

iface.launch()