from fastapi import APIRouter
import time
from datetime import datetime
from dotenv import load_dotenv
from api.ttspy import txt_to_speach,download_voice
import time
from moviepy.editor import VideoFileClip, concatenate_videoclips,AudioFileClip
import random
import os
from moviepy.editor import *

ttsRouter = APIRouter()

@ttsRouter.post("/tts")
def read_root(message :str = "我在測試",type : str = "商會"):
    
    # url = txt_to_speach(message)
    start_time = time.time()
    url,text_list = txt_to_speach(message)
    # url,execution_time = download_voice(message)
    
    
    # 合併mp3跟mp4
    output_url = f"static/tts/add_video{random.randint(1,25)}.mp4"
    output = os.path.split(os.path.abspath('main.py'))[0] +"/" + output_url
    merge_video_with_audio(f"{os.path.split(os.path.abspath('main.py'))[0]}/{url}" , output,type)

    end_time = time.time()
    execution_time = end_time - start_time

    return {"state":"success","url": output_url ,"mp3_url" : url,"reply_time":execution_time,"text_list":text_list}

@ttsRouter.post("/cut_video")
def cut_video(s :int = 5,type : int = 1):
    video_path = ""
    if type == 1:
        video_path = f"{os.path.split(os.path.abspath('main.py'))[0]}/static/2.15min.mp4" 
    else :
        video_path = f"{os.path.split(os.path.abspath('main.py'))[0]}/static/沒聲音動嘴巴2min.mp4"


    video_clip = VideoFileClip(video_path)
    video_clip = video_clip.subclip(2,2+s)

    output_url = f"static/tts/add_video{random.randint(1,25)}.mp4"
    output = os.path.split(os.path.abspath('main.py'))[0] +"/" + output_url

    video_clip.write_videofile(output, codec='libx264', audio_codec='aac')

    return {"state":"success","url": output_url}



def merge_video_with_audio(audio_path, output_path,type : str = "商會"):

    video_path = ""
    if type == "商會":
        video_path = f"{os.path.split(os.path.abspath('main.py'))[0]}/static/2min.mp4" 
    else :
        video_path = f"{os.path.split(os.path.abspath('main.py'))[0]}/static/2.15min.mp4"
    # 讀取視頻和音頻文件
    video_clip = VideoFileClip(video_path)
    audio_clip = AudioFileClip(audio_path)

    # 截取音頻文件的長度以匹配視頻
    video_clip = video_clip.set_duration(audio_clip.duration)

    # 將音頻添加到視頻中
    final_clip = video_clip.set_audio(audio_clip)

    # 保存合併後的視頻
    final_clip.write_videofile(output_path, codec='libx264', audio_codec='aac')

    # 釋放資源
    final_clip.close()
    video_clip.close()
    audio_clip.close()