# -*- coding: utf-8 -*-

# Copyright(C) 2011 Romain Bignon
#
# This file is part of weboob.
#
# weboob is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# weboob is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.


from weboob.capabilities.collection import Collection
from weboob.capabilities.image import Thumbnail

from weboob.deprecated.browser import Page

import re
from datetime import datetime, timedelta

from .video import NolifeTVVideo


class VideoPage(Page):
    def get_video(self, video):
        if not video:
            video = NolifeTVVideo(self.group_dict['id'])

        els = self.document.getroot().xpath('//div[@data-role="content"]')
        if els and els[0] is not None:
            h3 = els[0].find('h3')
            if h3 is not None and h3.text:
                video.title = unicode(h3.text)

            h4 = els[0].find('h4')
            if h4 is not None and h4.text:
                video.title = video.title + u' - ' + h4.text

            thumb = els[0].find('p/img')
            if thumb is not None and thumb.get('src'):
                video.thumbnail = Thumbnail(thumb.attrib['src'])
                video.thumbnail.url = video.thumbnail.id

            ps = els[0].findall('p')
            if len(ps) > 4:
                if ps[4].text:
                    video.description = ps[4].text
                if ps[0].text and ps[0].text != u'∞':
                    video.date = datetime.strptime(ps[0].text, '%d/%m/%Y').date()

                for text in ps[2].xpath('.//text()'):
                    m = re.search(r'[^\d]*((\d+):)?(\d+)s?', text)
                    if m:
                        if m.group(2):
                            minutes = int(m.group(2))
                        else:
                            minutes = 0
                        video.duration = timedelta(minutes=minutes,
                                                   seconds=int(m.group(3)))
            return video


class VideoListPage(Page):
    def is_list_empty(self):
        return self.document.getroot() is None

    def iter_video(self, available_videos):
        for el in self.document.getroot().xpath('//li/a'):
            strongs = el.findall('p/strong')
            if len(strongs) > 3 and strongs[0].text not in ['Autopromo', 'Annonce'] and strongs[1].text in available_videos:
                m = re.search(r'emission-(\d+)', el.attrib['href'])
                if m and m.group(1):
                    video = NolifeTVVideo(m.group(1))
                    h3 = el.find('h3')
                    if h3 is not None and h3.text:
                        video.title = unicode(h3.text)
                    if strongs[3].text:
                        video.title = video.title + ' - ' + strongs[3].text
                    yield video


class FamilyPage(Page):
    def iter_category(self):
        subs = list()

        for el in self.document.xpath('//ul/li[@data-role="list-divider"]'):
            if el.text not in subs:
                yield Collection([el.text], unicode(el.text))
            subs.append(el.text)

    def iter_family(self, sub):
        for el in self.document.xpath('//ul/li[@data-role="list-divider"]'):
            if el.text != sub:
                continue

            while True:
                el = el.getnext()
                if el is None or el.get('data-role'):
                    break
                h1 = el.find('.//h1')
                id = h1.getparent().attrib['href']
                m = re.search(r'famille-(\d+)', id)
                if m and m.group(1):
                    yield Collection([m.group(1)], unicode(h1.text))


class AboPage(Page):
    def get_available_videos(self):
        available = ['[Gratuit]']

        for text in self.document.xpath('//div[@data-role="content"]/center/text()'):
            if 'Soutien' in text:
                available.append('[Archive]')
                available.append('[Standard]')
            if 'Standard' in text:
                available.append('[Standard]')

        return available


class LoginPage(Page):
    def login(self, username, password):
        self.browser.select_form(name='login')
        self.browser['username'] = str(username)
        self.browser['password'] = str(password)
        self.browser.submit()


class HomePage(Page):
    def is_logged(self):
        return len(self.document.xpath('//a[@href="deconnexion/"]')) == 1
