from base import QUALITY_PRIORITY
from base.utils.funcs import identify_quality
from base.utils.external_sources.c30nama import *

def find_title_from_30nama(imdb_id: str, title_name: str):
    try:
        title_name = title_name.split('-')[0]
        title_name = title_name.replace("(", "")
        title_name = title_name.replace(")", "")
        title_name = title_name.strip()

        print(
            f'\n***********************\nsearching {title_name} with {imdb_id} in 30nama\n***********************')
        url = "https://interface.30nama.com/api/v1/action/full_search/type/all/orderby/relevant/order/desc/page/1"
        data = {
            "query": title_name
        }
        r1 = send_request_to_30nama(url, data)
        data = {
            "query": title_name[:-4].strip()
        }
        r2 = send_request_to_30nama(url, data)
        posts = merge_30nama_results(r1, r2)
        for post in posts:
            founded_imdb_id = post['imdb_id']
            if imdb_id == founded_imdb_id:
                print(f'\n***********************\ntitle founded in 30nama\n***********************')
                movie_id = post['id']
                is_series = post['is_series']
                return {'status': True, 'movie_id': movie_id, 'is_series': is_series}
        return {'status': False}
    except:
        return {'status': False}

def extract_dl_links_from_30nama(movie_id: int, is_series: bool, requested_season: int, requested_quality: str):
    try:
        primary_download_links = {}

        if requested_season == 0:
            requested_season = None

        url = f"https://interface.30nama.com/api/v1/action/download/id/{movie_id}"
        download_links = send_request_to_30nama(url)
        all_links = download_links['download']
        print(f'\n***********************\nfounded qualities in 30nama:')
        for links in all_links:
            file_size = links['size']
            try:
                current_season = links['season_int']
            except:
                current_season = 100
            _, quality = identify_quality(links['quality'])
            encoder = links['encoder']
            print(
                f'\n----- encoder: {encoder} quality: {quality} season: {current_season} file size(s): {file_size}')
            if requested_season == current_season or requested_season == 100:
                if (requested_quality == quality) or (requested_quality == 'all' and quality):
                    download_permission = False
                    if 'GB' in file_size:
                        if float(file_size.split(' ')[0]) < 3.99:
                            download_permission = True
                    else:
                        if 'MB' in file_size:
                            if float(file_size.split(' ')[0]) < 3990:
                                download_permission = True
                    if download_permission:
                        primary_download_links.setdefault(current_season, {})
                        primary_download_links[current_season].setdefault(quality, {})
                        primary_download_links[current_season][quality].setdefault(encoder, {})
                        primary_download_links[current_season][quality][encoder]['file_size'] = file_size
                        try:
                            for dl_url in links['link']:
                                primary_download_links[current_season][quality][encoder].setdefault('dl_links', []).append(dl_url['dl'])
                        except:
                            primary_download_links[current_season][quality][encoder].setdefault('dl_links', []).append(links['dl'])
        if primary_download_links:
            print(f'\n***********************\nall allowed download links: {primary_download_links}\n***********************')
            final_download_links = []
            for season, qualities in primary_download_links.items():
                for q in QUALITY_PRIORITY:
                    if q not in qualities:
                        continue

                    encoders = qualities[q]

                    selected = None
                    for encoder, data in encoders.items():
                        if encoder != "30nama":
                            selected = data
                            break

                    if not selected:
                        selected = next(iter(encoders.values()))

                    final_download_links.extend(selected["dl_links"])

                    break

            if final_download_links:
                return {'status': True, 'source': '30nama', 'is_series': is_series, 'dl_links': final_download_links}
            else:
                return {'status': False}
        else:
            return {'status': False}
    except:
        return {'status': False}