#VERSION: 1.00
# AUTHORS: Daniel Naranjo (garcianaranjodaniel@gmail.com)
# LICENSING INFORMATION

from helpers import download_file, retrieve_url
from novaprinter import prettyPrinter
import re

class dontorrent(object):
    url = 'https://dontorrent.co'
    name = 'DonTorrent'
    supported_categories = {
        'all': '',
    }

    def __init__(self):
        """
        Some initialization
        """

    def download_torrent(self, url):
        print(download_file(url))
        

    # DO NOT CHANGE the name and parameters of this function
    # This function will be the one called by nova2.py
    def search(self, what, cat='all'):
        search_url = f"{self.url}/buscar/{what.replace('+','%20')}"
        html = retrieve_url(search_url)
        """
        Para saber si ha encontrado torrents, en dontorrent te muestra un mensaje con la cantidad de torrents encontrados
        Si no encuentra nada, la cantidad de torrents es 0
        """
        quantity = re.findall(r'<p.*?class="lead.*?</p>', html)
        try:
            quantity = re.findall('<b>(.*?)</b>', quantity[1])[0]
            quantity = int(quantity)
        except IndexError:
            """
            Por algún motivo, aveces al señor dontorrent le da por directamente no mostrar nada
            Da igual si esa búsqueda tiene resultados o no, no muestra nada
            """
            quantity = 0

        """
        En la paginación tiene dos botones que son para ir a la pagina anterior y a la siguiente
        Por ello uso pages[1:-1] para quitar esos dos botones
        """
        if quantity > 0:
            pages = re.findall(r'<a.*?class="page-link.*?</a>', html)
            pages = pages[1:-1]
            pages = len(pages)
        else:
            pages = 0

        
        links = []

        """
        Las páginas tienen la siguiente estructura: url/buscar/what/page/[0-pages]
        Por ejemplo: https://dontorrent.cologne/buscar/star%20wars/page/1
        """
        for i in range(2, pages + 1):
            url = f"{self.url}/buscar/{what.replace('+','%20')}/page/{i}"
            html = retrieve_url(url)

            a_list = re.findall(r'<a.*?class="text-decoration-none.*?</a>', html)
            for a in a_list:
                url = re.findall(r'href=[\'"]?([^\'" >]+)', a)
                if len(url) > 0:
                    links.append(url[0])
            
        """
        Porque no accedo a la pagina 1?
        Básicamente al señor dontorrent aveces le da por no mostrar los resultados de las paginas que tienen la siguiente estructura:
        https://dontorrent.cologne/buscar/star%20wars/page/1
        Puede ser la página 1 como la 5. Así que para asegurarme obtener resultados, visito la página https://dontorrent.cologne/buscar/star%20wars
        que es equivalente a https://dontorrent.cologne/buscar/star%20wars/page/1

        Aun así puede no dar resultados pero si los da, me aseguro de que almenos devuelva algunos resultados
        """
        url = f"{self.url}/buscar/{what.replace('+','%20')}"
        html = retrieve_url(url)
        a_list = re.findall(r'<a.*?class="text-decoration-none.*?</a>', html)
        for a in a_list:
            url = re.findall(r'href=[\'"]?([^\'" >]+)', a)
            if len(url) > 0:
                links.append(url[0])

        for i in links:
            url = f"{self.url}{i}"
            html = retrieve_url(url)
            item = {}
            item['seeds'] = '-1'
            item['leech'] = '-1'
            item['engine_url'] = self.url
            item['desc_link'] = i
            item['name'] = name = i.split("/")[-1].replace("-", " ")

            if i.split("/")[1] != "serie":
                tam = re.findall(r'<p.*?class="mb-0.*?</p>', html)

                if len(tam) > 0:
                    if len(tam) == 2:
                        tam = tam[1]
                    else:
                        tam = tam[0]
                    
                    content = tam[tam.rfind("b")+2 : tam.rfind("<")]
                    content=content.strip()
                else:
                    content = "-1"

                content = content.replace(",", ".")
                item['size'] = content
                
                download_link = re.findall(r'<a.*?class="text-white bg-primary rounded-pill d-block shadow text-decoration-none p-1.*?</a>', html)

                if len(download_link) == 0:
                    # Esto ocurre si se accede a un enlace que es un documental
                    download_link = re.findall(r'<a.*?class="text-white bg-primary rounded-pill d-block shadow-sm text-decoration-none my-1 py-1.*?</a>', html)

                download_link = "https:" + re.findall(r'href=[\'"]?([^\'" >]+)', download_link[0])[0]
                item['link'] = download_link
                prettyPrinter(item)
            else:
                tds = re.findall(r'<tr>(.*?)</tr>', html, re.M|re.I|re.S)
                tds = tds[1:]
                for td in tds:
                    td_content = re.findall(r'<td.*?>(.*?)</td>', td, re.DOTALL)
                    a = td_content[1]

                    try:
                        download_link = "https:" + re.findall(r'href=[\'"]?([^\'" >]+)', a)[0]
                        item['link'] = download_link
                        item['size'] = -1
                        item['name'] = name + " " + td_content[0]
                        prettyPrinter(item)
                    except Exception:
                        continue