import os
import sys
import requests
import json
import shutil
from pyrogram import Client, filters
from pyrogram.types import Message
from pyrogram.types import (InlineKeyboardButton)
from base.utils.database import Database
from base.utils.buttons import subs_btn,media_task_panel,cancel, main_panel
from base import ADMINS, Bot, TELEGRAM_API, DOWNLOAD_DIR
from base.utils.subtitle_editor import add_intro,add_outro,find_ads_in_subtitle,delete_subtitle_line,recover_subtitle_line,convert_to_ass,convert_to_utf8,detect_encoding
@Bot.on_message(filters.private & filters.user(ADMINS) & filters.document, group=4)
async def edit_sub(_: Client, update: Message):
    user_id = update.from_user.id
    file_name = update.document.file_name
    file_name = file_name.replace("'", "").replace('"', '').replace(',', '')
    if file_name[-3:]=='srt':
        file_id = update.document.file_id
        data = {
            'file_id': file_id,
        }
        response = requests.post(f'{TELEGRAM_API}getFile', json=data, timeout=600)
        if response.status_code == 200:
            json_data = json.loads(response.content)
            save_path = json_data['result']['file_path']
            shutil.move(save_path, f'{DOWNLOAD_DIR}{file_name}')
        with Database() as db:
            sub_id = db.add_subtitle(file_name)
        with Database() as db:
            user_db = db.get_user(user_id, 'mode,state')
        mode = user_db[0][0]
        state = user_db[0][1]
        if mode in [1,2]:
            find_ads_in_subtitle(file_name)
        if mode == 2 or mode == 6:
            add_intro(file_name, mode)
            add_outro(file_name)
            file_name = convert_to_ass(file_name)
        else:
            add_intro(file_name, mode)
            add_outro(file_name)
        if state == 2:
            with Database() as db:
                user_db = db.get_user(user_id, 'package_id')
                package_id = user_db[0][0]
                media_task_db = db.get_media_task(package_id,'package_id','id,message_id,file_name','AND sub_or_audio IS NULL LIMIT 1')
                task_id = media_task_db[0][0]
                message_id = media_task_db[0][1]
                task_file_name = media_task_db[0][2]
                db.update_media_task(task_id,'sub_or_audio',f'mvo_{file_name}')
            await update.reply(f'عنوان فایل: {task_file_name}\nزیرنویس ثبت شده: mvo_{file_name}',reply_to_message_id=message_id, reply_markup=media_task_panel(f"{file_name.replace('.ass','.srt')}",task_id))
            with Database() as db:
                media_task_db = db.get_media_task(package_id,'package_id','file_name','AND sub_or_audio IS NULL LIMIT 1')
            if media_task_db:
                new_task_file_name = media_task_db[0][0]
                await update.reply(f'لطفا فایل زیرنویس و یا صوت دوبله هماهنگ با فایل {new_task_file_name} را ارسال کنید:',reply_markup=cancel())
            else:
                with Database() as db:
                    db.update_user(user_id,'mode',0)
                    db.update_user(user_id,'state',0)
                    db.update_user(user_id, 'package_id', None)
                await update.reply('به موویو اسپنر خوش آمدید.', reply_markup=main_panel())
        else:
            await update.reply(f'عنوان زیرنویس: {file_name}',reply_markup=subs_btn(f"{file_name.replace('.ass','.srt')}",sub_id))

@Bot.on_message(filters.private & filters.user(ADMINS) & filters.via_bot)
async def delete_and_recover_sub(_: Client, update: Message):
    text = update.text
    command = text.split(',')[0]
    file_name = text.split(',')[1]
    index = int(text.split(',')[2])
    try:
        task_type = int(text.split(',')[3])
    except:
        task_type = 1
    if command == 'delete':
        sub_line = delete_subtitle_line(file_name,index,task_type)
        await update.reply(f'زیرنویس شماره {index} با محتوای زیر با موفقیت از فایل زیرنویس اصلی حذف شد:\n{sub_line}')
    elif command == 'recover':
        sub_line = recover_subtitle_line(file_name,index,task_type)
        await update.reply(f'زیرنویس شماره {index} با محتوای زیر با موفقیت به فایل زیرنویس اصلی اضافه شد:\n{sub_line}')