from base import ENCODERS
from base.utils import identify_encoder_and_release
from base.utils.external_sources.empirebesttv import *
from base.utils.funcs import identify_quality

def get_empirebesttv_updates(title_type_str: str):
    base_url = get_empire_new_domain()
    posts = send_request_to_empire(f'{base_url}/backend/app/search/advanced?type={title_type_str}&page=1')['data']['results'][0:5]
    return posts

def extract_dl_links_from_empirebesttv(slug: str, title_type: int, requested_season: int, requested_quality: str):
    base_url = get_empire_new_domain()
    if title_type == 1:
        is_series = False
        title_type_str = 'movie'
    else:
        is_series = True
        title_type_str = 'serial'
    print(f"----- trying to get data from {base_url}backend/{title_type_str}s/single/{slug} -----")
    title_data = send_request_to_empire(f"{base_url}backend/{title_type_str}s/single/{slug}")['data'][title_type_str]
    imdb_id = title_data['details']['imdb_id']
    if title_type == 1:
        downloads = title_data['relationships']['downloads']
    else:
        downloads = title_data['relationships']['downloads'][requested_season - 1]['groups']
    download_links = []
    for download in downloads:
        if download['name'] == "خام":
            download_links += download['qualities']
        elif download['name'] == "سافت ساب":
            download_links += download['qualities']
    if download_links:
        primary_download_links = {}
        for download_link in download_links:
            permission, quality = identify_quality(download_link['quality']['name'])
            if permission:
                if quality == requested_quality or requested_quality == 'all':
                    if title_type == 1:
                        links = download_link['links']
                        for link in links:
                            dl_url = link['link']
                            try:
                                file_size = link['size']
                            except:
                                file_size = None
                            try:
                                primary_download_links[dl_url] = int(file_size)
                            except:
                                pass
                    else:
                        file_size = download_link['avg_size']
                        episodes = download_link['episodes']
                        for episode in episodes:
                            dl_url = episode['link']
                            try:
                                primary_download_links[dl_url] = int(file_size)
                            except:
                                try:
                                    primary_download_links[dl_url] = None
                                except:
                                    pass
        if primary_download_links:
            final_download_links = []
            for primary_download_link in primary_download_links:
                file_name = primary_download_link.split('/')[-1]
                file_size = primary_download_links.get(primary_download_link)
                print(f'----- trying to get permission for download {file_name} with {file_size} MB -----')
                _, encoder = identify_encoder_and_release(file_name)
                download_permission = False
                if file_size < 4000:
                    download_permission = True
                if download_permission:
                    if encoder.lower() in ENCODERS:
                        final_download_links.append(primary_download_link)
            if final_download_links:
                return {'status': True, 'source': 'empirebesttv', 'is_series': is_series, 'imdb_id': imdb_id, 'dl_links': final_download_links}
            else:
                return {'status': False}