ProviderBase = require './ProviderBase'
torify = require 'torify'
freebase = require 'freebase'
async = require 'async'
cheerio = require 'cheerio'
_ = require 'underscore'

class Wikipedia extends ProviderBase
	constructor: (@data, @freebase = require('freebase'), @defaults = {}) -> 
		if process.env.GOOGLE_API_KEY
			@defaults['key'] = process.env.GOOGLE_API_KEY

	cover_art: (args, callback) ->
		async.waterfall [
			($next) =>
				@freebase.wikipedia_page (@data.title or @data.freebase_id), @defaults, (result) =>
					$next null, result
			,(wiki, $next) =>
				torify 
					url: wiki
					no_cache: false
					jar: require('request').jar()
					headers: 
						"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
				,$next
			,(res, body, $next) =>
				$ = cheerio.load body

				additonal_data = {}
				additonal_data['cover_art'] = $('a.image > img').attr('src')

				$next null, additonal_data
		], callback

	description: (args, callback) ->
		async.waterfall [
			($next) =>
				@freebase.wikipedia_page (@data.title or @data.freebase_id), @defaults, (result) =>
					$next null, result
			,(wiki, $next) =>
				torify 
					url: wiki
					no_cache: false
					jar: require('request').jar()
					headers: 
						"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36"
				,$next
			,(res, body, $next) =>
				$ = cheerio.load body
				additonal_data = {}
				async.reduce $('#mw-content-text > p').slice(0, (args.paragraphs or 1)), additonal_data, (add, ele, next) =>
					additonal_data['description'] = (additonal_data['description'] or []).concat($(ele).text().trim().replace(/\[[A-Za-z0-9]\]/ig, ''))
					next()
				,(E, add) =>
					additonal_data['description'] = (additonal_data['description'] or []).join("\n")
					$next null, additonal_data
		], callback

module.exports = Wikipedia