import os
import sys
import requests
import json
import subprocess
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import config
from base.utils.database import Database

def send_request(method, data):
    if method == 'getFile':
        response = requests.post(f'{config.TELEGRAM_API}{method}', json=data)
    else:
        response = requests.post(f'{config.TELEGRAM_API}{method}', json=data)
    return response

def upload_video(method, data, files):
    response = requests.post(f'{config.TELEGRAM_API}{method}', data=data,files=files)
    return response

try:
    with Database() as db:
        media_task_db = db.get_media_task(5, 'status')
    if media_task_db:
        task_id = media_task_db[0][0]
        package_id = media_task_db[0][1]
        message_id = media_task_db[0][2]
        file_id = media_task_db[0][3]
        file_name = media_task_db[0][4]
        with Database() as db:
            package_db = db.get_package(package_id, 'id', 'chat_id,type')
        chat_id = package_db[0][0]
        task_type = package_db[0][1]
        if task_type == 1 or task_type == 5:
            file_path = config.SOFTSUB_DIR
        elif task_type == 2 or task_type == 6:
            file_path = config.HARDSUB_DIR
        elif task_type == 3:
            file_path = config.DUBBED_DIR
        elif task_type == 4:
            file_path = config.MOVIEO_ENCODES_DIR
        if os.path.exists(f'{file_path}{file_name}'):
            file_size = os.path.getsize(f'{file_path}{file_name}')
            file_size = file_size / (1024 * 1024)
            if file_size < 1900:
                with Database() as db:
                    db.update_media_task(task_id, 'status', 6)
                data = {
                    'chat_id': chat_id,
                    'message_id': message_id,
                    'text': '📤 درحال آپلود فایل...',
                }
                send_request('editMessageText', data)
                command = f"ffprobe -i {file_path}'{file_name}' -v quiet -show_entries format=duration -hide_banner -of default=noprint_wrappers=1:nokey=1 -sexagesimal"
                res = subprocess.run(command, shell=True, capture_output=True, text=True)
                if res.returncode == 0:
                    duration = res.stdout.split('.')[0].split(':')
                    sec = 0
                    if int(duration[0]) != 0:
                        sec = int(duration[0]) * 60
                        sec = sec * 60
                    sec += int(duration[1]) * 60
                    sec += int(duration[2])
                    if task_type in [1,2,3,5,6]:
                        with open(f'{file_path}{file_name}', 'rb') as video_file, open(config.THUMB_DIR, 'rb') as thumb:
                            files = {'video': video_file, 'thumb': thumb}
                            data = {'chat_id': chat_id, 'duration': sec, 'caption': file_name,
                                    'supports_streaming': True}
                            res = upload_video('sendVideo', data, files)
                    else:
                        with open(f'{file_path}{file_name}', 'rb') as video_file:
                            files = {'document': video_file}
                            data = {'chat_id': chat_id, 'caption': file_name}
                            res = upload_video('sendDocument', data, files)
                    res = json.loads(res.text)
                    if res['ok']:
                        data = {
                            'chat_id': chat_id,
                            'message_id': message_id,
                            'text': '✅ آپلود فایل با موفقیت انجام شد.',
                        }
                        send_request('editMessageText', data)
                        os.remove(f"{file_path}{file_name}")
                        with Database() as db:
                            db.update_media_task(task_id, 'status', 7)
                    else:
                        data = {
                            'chat_id': 689423806,
                            'text': f'ERROR: {task_id}, {file_name} {res.content}',
                        }
                        send_request('sendMessage', data)
                        data = {
                            'chat_id': chat_id,
                            'message_id': message_id,
                            'text': '❗️ مشکلی در آپلود فایل بوجود آمد.',
                        }
                        send_request('editMessageText', data)
                        os.remove(f"{file_path}{file_name}")
                        with Database() as db:
                            db.update_media_task(task_id, 'status', 8)
            else:
                with Database() as db:
                    db.update_media_task(task_id, 'status', 6)
                data = {
                    'chat_id': chat_id,
                    'message_id': message_id,
                    'text': '📤 درحال آپلود فایل...',
                }
                send_request('editMessageText', data)
                data = {
                    'chat_id': 689423806,
                    'text': f'upload,{task_id}',
                }
                send_request('sendMessage', data)
        else:
            with Database() as db:
                db.update_media_task(task_id, 'status', 8)
            data = {
                'chat_id': chat_id,
                'message_id': message_id,
                'text': '❗️ مشکلی در آپلود فایل بوجود آمد.',
            }
            send_request('editMessageText', data)
except Exception as e:
    with Database() as db:
        db.update_media_task(task_id, 'status', 5)
    data = {
        'chat_id': chat_id,
        'message_id': message_id,
        'text': '❗️ مشکلی در آپلود فایل بوجود آمد.',
    }
    send_request('editMessageText', data)
    data = {
        'chat_id': 689423806,
        'text': f'ERROR: {task_id}, {file_name} {e}',
    }
    send_request('sendMessage', data)
