#-*- coding:utf-8 -*-
import re
import urllib2
import xml.etree.ElementTree
from aqt.utils import showInfo
from .base import WebService, export, register, with_styles
js = '''
var initVoice = function () {
    var player = document.getElementById('dictVoice');
    document.addEventListener('click', function (e) {
        var target = e.target;
        if (target.hasAttribute('role') && target.getAttribute('role').indexOf('dict_audio_js') >= 0) {
            var url = target.getAttribute('data-rel');
            player.setAttribute('src', url);
            player.volume = 1;
            player.play();
            e.preventDefault();
        }
    }, false);
};
initVoice();
'''
youdao_download_mp3 = True
@register(u'有道词典')
class Youdao(WebService):
    def __init__(self):
        super(Youdao, self).__init__()
    def _get_from_api(self, lang='eng'):
        url = "http://dict.youdao.com/fsearch?client=deskdict&keyfrom=chrome.extension&pos=-1&doctype=xml&xmlVersion=3.2&dogVersion=1.0&vendor=unknown&appVer=3.1.17.4208&le=%s&q=%s" % (
            lang, self.word)
        phonetics, explains = '', ''
        try:
            result = urllib2.urlopen(url, timeout=5).read()
            # showInfo(str(result))
            doc = xml.etree.ElementTree.fromstring(result)
            # fetch symbols
            symbol, uk_symbol, us_symbol = doc.findtext(".//phonetic-symbol"), doc.findtext(
                ".//uk-phonetic-symbol"), doc.findtext(".//us-phonetic-symbol")
            if uk_symbol and us_symbol:
                #phonetics = 'UK [%s]   US [%s]' % (uk_symbol, us_symbol)
                phonetics = '/%s/' % (us_symbol)
            elif symbol:
                phonetics = '/%s/' % symbol
            else:
                phonetics = ''
            # fetch explanations
            explains = '
'.join([node.text for node in doc.findall(
                ".//custom-translation/translation/content")])
            return self.cache_this({'phonetic': phonetics, 'explains': explains})
        except:
            return {'phonetic': phonetics, 'explains': explains}
    @export(u'音标', 0)
    def fld_phonetic(self):
        return self.cache_result('phonetic') if self.cached('phonetic') else self._get_from_api()['phonetic']
    @export(u'基本释义', 1)
    def fld_explains(self):
        return self.cache_result('explains') if self.cached('explains') else self._get_from_api()['explains']
    @with_styles(cssfile='_youdao.css', js=js, need_wrap_css=True, wrap_class='youdao')
    def _get_singledict(self, single_dict, lang='eng'):
        url = u"http://m.youdao.com/singledict?q={0}&dict={1}&le={2}&more=false".format(
            self.word, single_dict, lang)
        try:
            result = urllib2.urlopen(url, timeout=5).read()
            return u'