import os
import requests
import json
import gradio as gr
import re

# Hugging Face 환경 변수로부터 RapidAPI 키와 호스트 가져오기
AA_KEY = os.getenv("AA_KEY")
AA_HOST = "youtube-transcriptor.p.rapidapi.com"

# 유튜브 URL에서 비디오 ID를 추출하는 함수
def get_video_id(youtube_url):
    # 유튜브 URL 또는 youtu.be 단축 URL에서 video_id 추출
    video_id_match = re.search(r"(?<=v=)[^#&?]*", youtube_url) or re.search(r"(?<=youtu.be/)[^#&?]*", youtube_url)
    return video_id_match.group(0) if video_id_match else None

# 자막 언어 우선순위 리스트
LANGUAGE_PRIORITY = ['ko', 'en', 'ja', 'zh']

# 유튜브 자막을 요청하는 함수 (언어 우선순위를 적용하여 시도)
def get_youtube_transcript(youtube_url):
    # 비디오 ID 추출
    video_id = get_video_id(youtube_url)
    if video_id is None:
        return {"error": "잘못된 유튜브 URL입니다. 비디오 ID를 찾을 수 없습니다."}
    
    url = "https://youtube-transcriptor.p.rapidapi.com/transcript"
    
    headers = {
        "x-rapidapi-key": AA_KEY,
        "x-rapidapi-host": AA_HOST
    }

    # 언어 우선순위에 따라 순차적으로 요청을 시도
    for lang in LANGUAGE_PRIORITY:
        querystring = {"video_id": video_id, "lang": lang}
        response = requests.get(url, headers=headers, params=querystring)
        
        # 상태 코드 확인 및 전체 응답 반환
        if response.status_code == 200:
            try:
                data = response.json()

                # 전체 응답 데이터를 그대로 반환
                return {"language": lang, "data": data}
            
            except json.JSONDecodeError as e:
                return {"error": f"JSON 디코딩 오류 발생: {str(e)}"}

    # 모든 언어에서 자막을 찾지 못한 경우
    return {"error": "우선순위 언어로 자막을 찾을 수 없습니다."}

# Gradio 인터페이스 정의
def youtube_transcript_interface(youtube_url):
    # 자막 데이터 가져오기
    transcript_data = get_youtube_transcript(youtube_url)
    
    # 결과 출력
    return json.dumps(transcript_data, ensure_ascii=False, indent=2)

# Gradio 인터페이스 생성
interface = gr.Interface(
    fn=youtube_transcript_interface, 
    inputs="text", 
    outputs="text",
    title="YouTube 자막 추출기",
    description="유튜브 URL을 입력하세요."
)

# Gradio 인터페이스 실행
interface.launch()