from __future__ import absolute_import
from __future__ import print_function
import requests
import logging
import re
from six.moves import urllib

# See readme.md for instructions on running this code.

class WikipediaHandler(object):
    '''
    This plugin facilitates searching Wikipedia for a
    specific key term and returns the top article from the
    search. It looks for messages starting with '@mention-bot'

    In this example, we write all Wikipedia searches into
    the same stream that it was called from, but this code
    could be adapted to write Wikipedia searches to some
    kind of external issue tracker as well.
    '''

    META = {
        'name': 'Wikipedia',
        'description': 'Searches Wikipedia for a term and returns the top article.',
    }

    def usage(self):
        return '''
            This plugin will allow users to directly search
            Wikipedia for a specific key term and get the top
            article that is returned from the search. Users
            should preface searches with "@mention-bot".
            '''

    def handle_message(self, message, bot_handler):
        bot_response = self.get_bot_wiki_response(message, bot_handler)
        bot_handler.send_reply(message, bot_response)

    def get_bot_wiki_response(self, message, bot_handler):
        help_text = 'Please enter your message after @mention-bot'
        query = message['content']
        if query == '':
            return help_text
        query_wiki_link = ('https://en.wikipedia.org/w/api.php?action=query&'
                           'list=search&srsearch=%s&format=json'
                           % (urllib.parse.quote(query),))
        try:
            data = requests.get(query_wiki_link)
        except requests.exceptions.RequestException:
            logging.error('broken link')
            return

        if data.status_code != 200:
            logging.error('unsuccessful data')
            return

        new_content = 'For search term "' + query
        if len(data.json()['query']['search']) == 0:
            new_content = 'I am sorry. The search term you provided is not found :slightly_frowning_face:'
        else:
            search_string = data.json()['query']['search'][0]['title'].replace(' ', '_')
            url = 'https://en.wikipedia.org/wiki/' + search_string
            new_content = new_content + '", ' + url
        return new_content


handler_class = WikipediaHandler
