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

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


with Database() as db:
    media_task_db = db.get_media_task(1, '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')
    chat_id = package_db[0][0]
    if not os.path.exists(f'{config.DOWNLOAD_DIR}{file_name}'):
        with Database() as db:
            db.update_media_task(task_id, 'status', 2)
        data = {
            'chat_id': chat_id,
            'message_id': message_id,
            'text': '📥 درحال دانلود فایل...',
        }
        res = send_request('editMessageText', data)
        print(res.content)
        print(chat_id)
        print(message_id)
        data = {
            'file_id': file_id,
        }
        response = send_request('getFile', data)
        print(response.content)
        if response.status_code == 200:
            json_data = json.loads(response.content)
            save_path = json_data['result']['file_path']
            print(os.listdir(config.DOWNLOAD_DIR))
            shutil.move(save_path, f'{config.DOWNLOAD_DIR}{file_name}')
            print(os.listdir(config.DOWNLOAD_DIR))
            with Database() as db:
                db.update_media_task(task_id, 'status', 3)
            reply_markup = {
                'inline_keyboard': [
                    [{'text': '❌ انصراف', 'callback_data': f'cancel,{task_id}'}]
                ]
            }
            data = {
                'chat_id': chat_id,
                'message_id': message_id,
                'text': '⏳ در صف انتظار برای پردازش فایل...',
                'reply_markup': reply_markup
            }
            send_request('editMessageText', data)
        else:
            with Database() as db:
                db.update_media_task(task_id, 'status', 1)
            data = {
                'chat_id': chat_id,
                'message_id': message_id,
                'text': 'مشکلی در دانلود فایل بوجود آمد.',
            }
            res = send_request('editMessageText', data)
            data = {
                'chat_id': 689423806,
                'text': f'ERROR: {task_id}, {file_name} {response.content}',
            }
            send_request('sendMessage', data)
    else:
        with Database() as db:
            db.update_media_task(task_id, 'status', 3)
        reply_markup = {
            'inline_keyboard': [
                [{'text': '❌ انصراف', 'callback_data': f'cancel,{task_id}'}]
            ]
        }
        data = {
            'chat_id': chat_id,
            'message_id': message_id,
            'text': '⏳ در صف انتظار برای پردازش فایل...',
            'reply_markup': reply_markup
        }
        send_request('editMessageText', data)