#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import absolute_import, division, print_function, unicode_literals

from calibre.web.feeds.news import BasicNewsRecipe


def classes(classes):
    q = frozenset(classes.split(' '))
    return dict(attrs={'class': lambda x: x and frozenset(x.split()).intersection(q)})


class FoxNews(BasicNewsRecipe):
    title = 'FOX News'
    __author__ = 'Darko Miletic'
    description = 'Breaking News from FOX'
    publisher = 'FOXNews.com'
    category = 'news, breaking news, latest news, current news, world news, national news, USA'
    oldest_article = 2
    max_articles_per_feed = 200
    no_stylesheets = True
    encoding = 'utf8'
    use_embedded_content = False

    language = 'en_US'
    remove_empty_feeds = True
    extra_css = '''
        body{font-family: Arial,sans-serif }
        .caption{font-size: x-small}
        .author,.dateline{font-size: small}
    '''

    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)

    conversion_options = {'comment': description, 'tags': category, 'publisher': publisher, 'language': language}

    remove_attributes = ['xmlns', 'lang']
    ignore_duplicate_articles = {'title', 'url'}
    keep_only_tags = [
        dict(itemprop=['headline', 'articleBody']),
        dict(name='h1'),
        classes('byline author date source article-info article-body featured-image'),
    ]
    remove_tags = [
        classes('featured-video video-container'),
    ]

    feeds = [
        ('Latest Headlines', 'http://feeds.foxnews.com/foxnews/latest'),
        ('National', 'http://feeds.foxnews.com/foxnews/national'),
        ('World', 'http://feeds.foxnews.com/foxnews/world'),
        ('Politics', 'http://feeds.foxnews.com/foxnews/politics'),
        ('Opinion', 'http://feeds.foxnews.com/foxnews/opinion'),
        ('Science', 'http://feeds.foxnews.com/foxnews/science'),
        ('Technology', 'http://feeds.foxnews.com/foxnews/tech'),
        ('Health', 'http://feeds.foxnews.com/foxnews/health'),
        ('Lifestyle', 'http://feeds.foxnews.com/foxnews/section/lifestyle'),
        ('Travel', 'http://feeds.foxnews.com/foxnews/internal/travel/mixed'),
    ]
