# video_editor.py
# MoviePy를 활용한 실제 영상 편집 로직
from moviepy.editor import *
from utils import time_to_seconds

def generate_final_video(config, source_video_path, sermon_start_time, sermon_end_time, title, scripture, speaker, output_filename):
    """
    사용자 입력과 설정값을 바탕으로 최종 예배 영상을 생성합니다.
    """
    # --- 1. 설정값 불러오기 ---
    paths_config = config['Paths']
    text_config = config['TextOverlay']

    intro_template_path = paths_config['intro_video']
    outro_template_path = paths_config['outro_video']
    font_path = paths_config['font']
    output_folder = paths_config['output_folder']

    # --- 2. 설교 말씀 영상 추출 ---
    print("Step 1: 설교 말씀 영상 자르는 중...")
    main_clip = VideoFileClip(source_video_path)
    sermon_clip = main_clip.subclip(
        time_to_seconds(sermon_start_time),
        time_to_seconds(sermon_end_time)
    )

    # --- 3. 인트로 영상 생성 ---
    print("Step 2: 인트로 영상 생성 중...")
    intro_template = VideoFileClip(intro_template_path)

    # 텍스트 클립 생성
    title_clip = TextClip(title, fontsize=int(text_config['title_fontsize']), color=text_config['title_color'], font=font_path).set_duration(intro_template.duration)
    scripture_clip = TextClip(scripture, fontsize=int(text_config['scripture_fontsize']), color=text_config['scripture_color'], font=font_path).set_duration(intro_template.duration)
    speaker_clip = TextClip(speaker, fontsize=int(text_config['speaker_fontsize']), color=text_config['speaker_color'], font=font_path).set_duration(intro_template.duration)

    # 텍스트 위치 설정
    title_clip = title_clip.set_position(eval(text_config['title_position']))
    scripture_clip = scripture_clip.set_position(eval(text_config['scripture_position']))
    speaker_clip = speaker_clip.set_position(eval(text_config['speaker_position']))

    # 인트로 영상에 텍스트 합성
    intro_final = CompositeVideoClip([intro_template, title_clip, scripture_clip, speaker_clip])

    # --- 4. 아웃트로 영상 생성 ---
    # (아웃트로는 필요에 따라 텍스트를 추가하거나 그대로 사용)
    print("Step 3: 아웃트로 영상 준비 중...")
    outro_final = VideoFileClip(outro_template_path)

    # --- 5. 최종 영상 병합 ---
    print("Step 4: 모든 영상을 하나로 합치는 중...")
    final_clip = concatenate_videoclips([intro_final, sermon_clip, outro_final])

    # --- 6. 최종 영상 파일 저장 ---
    output_path = os.path.join(output_folder, output_filename)
    print(f"Step 5: 최종 영상 저장 중... ({output_path})")
    final_clip.write_videofile(output_path, codec='libx264', audio_codec='aac')

    # --- 7. 리소스 정리 ---
    main_clip.close()
    sermon_clip.close()
    intro_template.close()
    intro_final.close()
    outro_final.close()
    final_clip.close()
