# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per serietvonline.py
# ----------------------------------------------------------
"""
    Novità. Indicare in quale/i sezione/i è presente il canale:
       - film, serie

    Avvisi:
        - Al massimo 25 titoli per le sezioni: Film
        - Al massimo 35 titoli per le sezioni: Tutte le altre
        Per aggiungere in videoteca le Anime:
            Se hanno la forma 1x01:
                -si posso aggiungere direttamente dalla pagina della serie, sulla voce in fondo "aggiungi in videoteca".
            Altrimenti:
                - Prima fare la 'Rinumerazione' dal menu contestuale dal titolo della serie
"""
import re
from core import support, httptools, scrapertools
from platformcode import config
from core.item import Item


# def findhost(url):
#     host = support.match(url, patron=r'href="([^"]+)">\s*cliccando qui').matches[-1]
#     return host

host = config.get_channel_url()
headers = [['Referer', host]]


@support.menu
def mainlist(item):
    support.info()


    film = ['/ultimi-film-aggiunti/',
            ('A-Z', ['/lista-film/', 'peliculas', 'lista'])
        ]

    tvshow = ['',
            ('Aggiornamenti', ['/ultimi-episodi-aggiunti/', 'peliculas', 'update']),
            ('Tutte', ['/lista-serie-tv/', 'peliculas', 'qualcosa']),
            ('Italiane', ['/lista-serie-tv-italiane/', 'peliculas', 'qualcosa']),
            ('Anni 50-60-70-80', ['/lista-serie-tv-anni-60-70-80/', 'peliculas', 'qualcosa']),
            ('HD', ['/lista-serie-tv-in-altadefinizione/', 'peliculas', 'qualcosa'])
        ]

    anime = ['/lista-cartoni-animati-e-anime/']

    documentari = [('Documentari {bullet bold}', ['/lista-documentari/' , 'peliculas' , 'doc', 'tvshow'])]

    search = ''

    return locals()

@support.scrape
def peliculas(item):
    support.info()
    anime = True

    blacklist = ['DMCA', 'Contatti', 'Attenzione NON FARTI OSCURARE', 'Lista Cartoni Animati e Anime']
    patronBlock = r'<h1>.+?</h1>(?P<block>.*?)<div class="footer_c">'
    patronNext = r'<div class="siguiente"><a href="([^"]+)" >'
    # debug = True

    if item.args == 'search':
        patronBlock = r'>Lista Serie Tv</a></li></ul></div><div id="box_movies">(?P<block>.*?)<div id="paginador">'
        patron = r'<div class="movie">[^>]+[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.+?)(?:(?P<year>\d{4})|")[^>]*>\s*<a href="(?P<url>[^"]+)'
    elif item.contentType == 'episode':
        pagination = 35
        action = 'findvideos'
        patron = r'<td><a href="(?P<url>[^"]+)"(?:[^>]+)?>\s?(?P<title>.*?)(?P<episode>\d+x\d+)[ ]?(?P<title2>[^<]+)?<'

    elif item.contentType == 'tvshow':
        # SEZIONE Serie TV- Anime - Documentari
        pagination = 35

        if not item.args and 'anime' not in item.url:
            patron = r'<div class="movie">[^>]+>.+?src="(?P<thumb>[^"]+)" alt="[^"]+".+? href="(?P<url>[^"]+)">.*?<h2>(?P<title>[^"]+)</h2>\s?(?:<span class="year">(?P<year>\d+|\-\d+))?<'
        else:
            anime = True
            patron = r'(?:<td>)?<a href="(?P<url>[^"]+)"(?:[^>]+)?>\s?(?P<title>[^<]+)(?P<episode>[\d\-x]+)?(?P<title2>[^<]+)?<'
    else:
        # SEZIONE FILM
        pagination = 25

        if item.args == 'lista':
            patron = r'href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)(?:\s(?P<year>\d{4})|<)'
            patronBlock = r'Lista dei film disponibili in streaming e anche in download\.</p>(?P<block>.*?)<div class="footer_c">'
        else:
            patron = r'<tr><td><a href="(?P<url>[^"]+)"(?:|.+?)?>(?:&nbsp;&nbsp;)?[ ]?(?P<title>.*?)[ ]?(?P<quality>HD)?[ ]?(?P<year>\d+)?(?: | HD[^<]*| Streaming[^<]*| MD(?: iSTANCE)? [^<]*)?</a>'

    def itemHook(item):
        if 'film' in item.url:
            item.action = 'findvideos'
            item.contentType = 'movie'
        elif item.args == 'update':
            pass
        else:
            item.contentType = 'tvshow'
            item.action = 'episodios'
        return item
    return locals()


@support.scrape
def episodios(item):
    support.info()
    anime = True
    action = 'findvideos'
    patronBlock = r'<table>(?P<block>.*)<\/table>'
    patron = r'<tr><td>(?P<title>.*?)?[ ](?:Parte)?(?P<episode>\d+x\d+|\d+)(?:|[ ]?(?P<title2>.+?)?(?:avi)?)<(?P<data>.*?)<\/td><tr>'
    def itemlistHook(itemlist):
        for i, item in enumerate(itemlist):
            ep = support.match(item.title, patron=r'\d+x(\d+)').match
            if ep == '00':
                item.title = item.title.replace('x00', 'x' + str(i+1).zfill(2)).replace('- ..','')
        return itemlist
    return locals()


def search(item, text):
    support.info("CERCA :" ,text, item)

    item.url = "%s/?s=%s" % (host, text)

    try:
        item.args = 'search'
        return peliculas(item)
    # Continua la ricerca in caso di errore
    except:
        import sys
        for line in sys.exc_info():
            support.info("%s" % line)
        return []

def newest(categoria):
    support.info(categoria)

    itemlist = []
    item = Item()

    if categoria == 'peliculas':
        item.contentType = 'movie'
        item.url = host + '/ultimi-film-aggiunti/'
    elif categoria == 'series':
        item.args = 'update'
        item.contentType = 'episode'
        item.url = host +'/ultimi-episodi-aggiunti/'
    try:
        item.action = 'peliculas'
        itemlist = peliculas(item)

    except:
        import sys
        for line in sys.exc_info():
            support.info("{0}".format(line))
        return []

    return itemlist

def findvideos(item):
    support.info()
    if item.contentType == 'movie':
        return support.server(item, headers=headers)
    else:

        if item.args != 'update':
            return support.server(item, item.data)
        else:
            itemlist = []
            item.infoLabels['mediatype'] = 'episode'

            data = support.match(item.url, headers=headers).data
            url_video = scrapertools.find_single_match(data, r'<tr><td>(.+?)</td><tr>', -1)
            url_serie = scrapertools.find_single_match(data, r'<link rel="canonical" href="([^"]+)"\s?/>')
            goseries = support.typo("Vai alla Serie:", ' bold')
            series = support.typo(item.contentSerieName, ' bold color kod')
            itemlist = support.server(item, data=url_video)

            itemlist.append(item.clone(title=goseries + series, contentType='tvshow', url=url_serie, action='episodios', plot = goseries + series + "con tutte le puntate", args=''))

        return itemlist
