#!/usr/bin/env python
# vim:fileencoding=utf-8
"""
Fetch sueddeutsche.de
"""

from calibre.web.feeds.news import BasicNewsRecipe


class Sueddeutsche(BasicNewsRecipe):
    title = 'Süddeutsche Zeitung'
    __author__ = 'unkn0wn'
    oldest_article = 1.2
    masthead_url = 'https://upload.wikimedia.org/wikipedia/commons/4/42/S%C3%BCddeutsche_Zeitung_Logo.svg'
    description = 'Deutschlands führende Nachrichtenseite. Alles Wichtige aus Politik, Wirtschaft, Sport, Kultur, Wissenschaft, Technik und mehr.'
    encoding = 'utf-8'
    language = 'de'
    remove_attributes = ['style', 'height', 'width']
    ignore_duplicate_articles = {'url'}
    resolve_internal_links = True
    remove_empty_feeds = True
    no_javascript = True
    no_stylesheets = True

    recipe_specific_options = {
        'days': {
            'short': 'Oldest article to download from this news source. In days ',
            'long': 'For example, 0.5, gives you articles from the past 12 hours',
            'default': str(oldest_article),
        }
    }

    def __init__(self, *args, **kwargs):
        BasicNewsRecipe.__init__(self, *args, **kwargs)
        d = self.recipe_specific_options.get('days')
        if d and isinstance(d, str):
            self.oldest_article = float(d)

    extra_css = '''
        [data-manual="overline"] { font-size:small; color: #404040; }
        [data-manual="date"], [data-manual^="headerImageCaption"], [data-manual="author"] { font-size:small; }
         [data-manual="teaserText"] { font-style:italic; color:#202020; }
        blockquote, em { color: #202020; }
    '''

    def get_cover_url(self):
        soup = self.index_to_soup('https://www.frontpages.com/germany-newspapers/')
        for img in soup.findAll('img', src=True):
            if 'suddeutsche-zeitung' in img['src']:
                return 'https://www.frontpages.com' + img['src']

    keep_only_tags = [
        dict(attrs={'data-manual': ['overline', 'title', 'date', 'headerImage', 'teaserText', 'author', 'body']}),
    ]
    remove_tags = [dict(name=['svg', 'button', 'meta']), dict(attrs={'data-manual-remove': 'true'})]

    # https://www.sueddeutsche.de/service/updates-mit-rss-uebersicht-aller-rss-feeds-fuer-sz-de-sz-magazin-und-jetzt-de-1.393950
    feeds = [
        ('Politik', 'http://rss.sueddeutsche.de/rss/Politik'),
        ('Wirtschaft', 'http://rss.sueddeutsche.de/rss/Wirtschaft'),
        ('Geld', 'http://rss.sueddeutsche.de/rss/Geld'),
        ('Kultur', 'http://rss.sueddeutsche.de/rss/Kultur'),
        ('Sport', 'http://rss.sueddeutsche.de/rss/Sport'),
        ('Leben', 'http://rss.sueddeutsche.de/rss/Leben'),
        ('Karriere', 'http://rss.sueddeutsche.de/rss/Karriere'),
        ('Bildung', 'http://rss.sueddeutsche.de/rss/Bildung'),
        ('Gesundheit', 'http://rss.sueddeutsche.de/rss/gesundheit'),
        ('Stil', 'http://rss.sueddeutsche.de/rss/stil'),
        ('München & Region', 'http://rss.sueddeutsche.de/rss/muenchen'),
        ('Bayern', 'http://rss.sueddeutsche.de/rss/Bayern'),
        ('Medien', 'http://rss.sueddeutsche.de/rss/Medien'),
        ('Digital', 'http://rss.sueddeutsche.de/rss/Digital'),
        ('Auto', 'http://rss.sueddeutsche.de/rss/Auto'),
        ('Wissen', 'http://rss.sueddeutsche.de/rss/Wissen'),
        ('Panorama', 'http://rss.sueddeutsche.de/rss/Panorama'),
        ('Reise', 'http://rss.sueddeutsche.de/rss/Reise'),
        ('Alles', 'https://rss.sueddeutsche.de/alles'),
    ]

    def get_article_url(self, article):
        url = BasicNewsRecipe.get_article_url(self, article)
        url = url.split('?')[0]
        if 'sz-magazin.sueddeutsche.de/' not in url and 'artikel' not in url:
            return url

    def preprocess_html(self, soup):
        sub = soup.find(attrs={'data-manual': ['overline', 'date']})
        if sub:
            sub.name = 'div'
        h1 = soup.find(attrs={'data-manual': 'title'})
        if h1:
            h1.name = 'h1'
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup

    def print_version(self, url):
        return 'https://och.to/unlock/' + url
