#!/usr/bin/env  python2
__license__ = 'GPL v3'
__copyright__ = '2009, Matthew Briggs'
__docformat__ = 'restructuredtext en'

'''
http://www.theaustralian.news.com.au/
'''

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 DailyTelegraph(BasicNewsRecipe):
    title = u'The Australian'
    __author__ = u'Kovid Goyal'
    description = (u'National broadsheet newspaper from down under - colloquially known as The Oz'
                   '. You will need to have a subscription to '
                   'http://www.theaustralian.com.au to get full articles.')
    language = 'en_AU'

    oldest_article = 2
    needs_subscription = 'optional'
    max_articles_per_feed = 30
    remove_javascript = True
    no_stylesheets = True
    encoding = 'utf8'
    remove_empty_feeds = True
    ignore_duplicate_articles = {'url'}

    keep_only_tags = dict(id='story')
    remove_tags = [
        dict(id='comments'),
        classes('story-info story-header-tools module-controls story-sidebar'
        ' story-footer story-extras story-related vms-nav'
        ' vms-endcard vms-discover share-tools story-comments-link'
        ' vms-controls ooyala-player vms-countdown vms-header comments')
    ]

    feeds = [
        (u'News', u'http://feeds.news.com.au/public/rss/2.0/aus_news_807.xml'),
        (u'Opinion', u'http://feeds.news.com.au/public/rss/2.0/aus_opinion_58.xml'),
        (u'The Nation', u'http://feeds.news.com.au/public/rss/2.0/aus_the_nation_62.xml'),
        (u'World News', u'http://feeds.news.com.au/public/rss/2.0/aus_world_808.xml'),
        (u'US Election', u'http://feeds.news.com.au/public/rss/2.0/aus_uselection_687.xml'),
        (u'Climate', u'http://feeds.news.com.au/public/rss/2.0/aus_climate_809.xml'),
        (u'Media', u'http://feeds.news.com.au/public/rss/2.0/aus_media_57.xml'),
        (u'IT', u'http://feeds.news.com.au/public/rss/2.0/ausit_itnews_topstories_367.xml'),
        (u'Exec Tech', u'http://feeds.news.com.au/public/rss/2.0/ausit_exec_topstories_385.xml'),
        (u'Higher Education',
         u'http://feeds.news.com.au/public/rss/2.0/aus_higher_education_56.xml'),
        (u'Arts', u'http://feeds.news.com.au/public/rss/2.0/aus_arts_51.xml'),
        (u'Travel', u'http://feeds.news.com.au/public/rss/2.0/aus_travel_and_indulgence_63.xml'),
        (u'Property', u'http://feeds.news.com.au/public/rss/2.0/aus_property_59.xml'),
        (u'Sport', u'http://feeds.news.com.au/public/rss/2.0/aus_sport_61.xml'),
        (u'Business', u'http://feeds.news.com.au/public/rss/2.0/aus_business_811.xml'),
        (u'Aviation', u'http://feeds.news.com.au/public/rss/2.0/aus_business_aviation_706.xml'),
        (u'Commercial Property',
         u'http://feeds.news.com.au/public/rss/2.0/aus_business_commercial_property_708.xml'),
        (u'Mining', u'http://feeds.news.com.au/public/rss/2.0/aus_business_mining_704.xml')
    ]

    def do_login(self, browser, username, password):
        # TODO: Port this to BasicNewsRecipe login
        if username and password:
            browser.visit('http://www.theaustralian.com.au/login')
            form = browser.select_form(
                'form[action="https://idp.news.com.au/idp/Authn/rest"]')
            form['username'] = username
            form['password'] = password
            browser.submit(
                submit_control_selector='button[type="submit"]', timeout=60)
            if '>Log Out' not in browser.html:
                raise ValueError(
                    'Failed to log in, check your username and password')

    def get_article_url(self, article):
        return article.id
